如何在一个项目中的单独版本中包含第三方代码

时间:2014-08-21 15:05:53

标签: c# asp.net sitecore

我的手上有一个有趣的问题,我无法找到正确的处理方法。这是针对sitecore的,但我想这个问题的解决方案可以应用于任何拥有多个运行不同版本框架的网站的人。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

我将如何处理它:

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

内联版本

SearchStringModel.ParseDatasourceString

另一种方法是使用#if SC7 IEnumerable<SearchStringModel> searchStringModel = UIFilterHelpers.ParseDatasourceString(Attributes["sc_datasource"]); #else //SC72 IEnumerable<SearchStringModel> searchStringModel = SearchStringModel.ParseDatasourceString(Attributes["sc_datasource"]); #endif 类并定义特定于版本的实现(然后仅包括正确项目中的那些。也许你有:

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

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

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