gpt4 book ai didi

c# - 如何在一个项目的不同版本中包含第 3 方代码

转载 作者:行者123 更新时间:2023-11-30 22:04:09 26 4
gpt4 key购买 nike

我手上有一个有趣的问题,但我不太清楚处理它的正确方法。这是特定于 sitecore 的,但我认为该问题的解决方案适用于拥有多个运行不同版本框架的网站的任何人。

现在我有 3 个独立的网站运行 Sitecore 作为网站的框架和 CMS。一个网站运行的是 Sitecore 6.5 的代码,另一个是 7.0,另一个是 7.0,但很快就会是 7.2。

编程的核心原则之一是不要重复自己。我想建立一个单独的 C# 项目来处理 Sitecore 特定的逻辑和类。它主要包括像类这样的实用程序,这些类可以执行简单的功能,使我的生活更轻松地检查多种事物。这些基本功能包含在我使用的每个 Sitecore 版本中。

尽管存在差异,但 Sitecore DLL 之间基本上有大量共享功能,我希望能够在一个地方编写与版本无关的代码。

我不在乎它是否需要为我需要编译的每组 Sitecore DLL 构建 3 个单独的 DLL,只要我能保留一个基本源代码即可。这种事情可能吗?

最佳答案

我会如何处理:

设置一个独立的项目并使用配置/符号。许多简单的 .NET 代码可能可以普遍共享,但是如果您使用不同版本的 SC,您很可能会处理已弃用的功能、API 更改等。我能想到的一个例子是 UIFilterHelpers .ParseDatasourceString(在 7.2 中已弃用,取而代之的是 SearchStringModel.ParseDatasourceString)。有很多方法可以解决这个问题,例如:

内联版本

#if SC7
IEnumerable<SearchStringModel> searchStringModel = UIFilterHelpers.ParseDatasourceString(Attributes["sc_datasource"]);
#else //SC72
IEnumerable<SearchStringModel> searchStringModel = SearchStringModel.ParseDatasourceString(Attributes["sc_datasource"]);
#endif

另一种方法是使用partial 类并定义特定于版本的实现(然后只将那些包含在正确的项目中。也许你有:

  • Common.sln
    • Common.SC65.csproj
      • MyClass.cs [共享]
      • MyClass.SC65.cs
    • Common.SC7.csproj
      • MyClass.cs [共享]
      • MyClass.SC7.cs
    • Common.SC72.csproj
      • MyClass.cs [共享]
      • MyClass.SC72.cs

在上面,MyClass.cs 位于根目录中,并且包含在每个项目中。但是,.SC#.cs 文件仅包含在针对特定 sitecore 版本的项目中。

针对不同 .NET 平台或各种配置的库经常使用此模式。要使用 MVC 示例,您需要 MyProject.csprojMyProject.MVC3.csprojMyProject.MVC4.csproj MyProject.MVC5.csproj(每个都有不同的引用和可能的框架版本)。

关于c# - 如何在一个项目的不同版本中包含第 3 方代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com