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

标签 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,只要我可以保留一个基础源即可。这种事情可能吗?

最佳答案

我会如何处理:

建立一个独立的项目并使用配置/符号。许多简单的 .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.csproj , MyProject.MVC3.csproj , MyProject.MVC4.csproj , MyProject.MVC5.csproj (每个都有不同的引用和可能的框架版本)。

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

相关文章:

c# - 获取 templateField 标记内的文本框值?

sitecore通过客户端url查询项目

visual-studio-2010 - 在sitecore中跟踪NullReferenceExceptions

sitecore - sitecore 登录和内容编辑器页面上缺少安装后样式

c# - 使用 .NET 将声明的字符串作为查询发送到 SQL Server 中

c# - 在 MouseOver 上更改 TabControl 的 SelectedTab

c# - 更改 gridview 内下拉菜单的日期格式

javascript - 如何在客户端禁用 asp.net 验证器?

c# - knockout : Posting complex type to MVC controller query

c# - 判断小数是否大于四位