如何在一个项目的不同版本中包含第三方代码
本文关键字:版本 包含 代码 第三方 项目 一个 | 更新日期: 2023-09-27 18:19:03
我手头有一个有趣的问题,我不太清楚如何正确处理它。这是特定于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
- Common.SC65.csproj
上面的MyClass.cs
位于根目录,包含在每个项目中。但是,.SC#.cs
文件只包含在针对特定sitecore版本的项目中。
针对不同的。net平台或各种配置的库大量使用此模式。要使用MVC示例,您将有MyProject.csproj
, MyProject.MVC3.csproj
, MyProject.MVC4.csproj
, MyProject.MVC5.csproj
(每个都有不同的引用和可能的框架版本)。