我手上有一个有趣的问题,但我不太清楚处理它的正确方法。这是特定于 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
(每个都有不同的参考文献和可能的框架版本)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)