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

2024-03-27

我手上有一个有趣的问题,但我不太清楚处理它的正确方法。这是特定于 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(使用前将#替换为@)

如何在一个项目的不同版本中包含第 3 方代码 的相关文章

随机推荐

  • 如何禁用 Android 和 IOS 的复制和粘贴文本功能,该功能在 Phonegap 应用程序中长按屏幕后出现

    Phone Gap issue 如何禁用 ANDROID 以及 IOS 的默认文本复制粘贴功能 该功能在 Phonegap 应用程序中长按屏幕后出现 我提到如何禁用 jQuery Mobile iOS 中锚点的默认行为 https stac
  • 如何使用“Check”语句来验证 mysql 中的字段值?

    如何使用 Check 语句来验证 mysql 中的字段值 看这个page http dev mysql com doc refman 5 1 en create table html 手册中没有讨论check keyword In MySq
  • 具有一元运算符的 IIFE:现实世界用例[重复]

    这个问题在这里已经有答案了 我们可以假装使用一元运算符作为 IIFE 如下所示 function return 5 5 function return 5 5 function return 5 6 function return 5 fa
  • 返回第一个字符为非字母的行

    我正在尝试检索 SQlite 中以任何非字母字符开头的所有列 但似乎无法使其工作 我目前已经得到了这段代码 但它返回每一行 SELECT FROM TestTable WHERE TestNames NOT LIKE A z 有没有办法检索
  • 为什么 LinkedBlockingQueue.take() 即使有元素也会阻塞?

    我有 10 个网络爬虫 它们共享一个LinkedBlockingQueue 从 Eclipse 中的调试视图中 我发现当我获取多个 URL 大约 1000 个 时 list take 通话时间很长 它是这样工作的 private synch
  • 从lua中的函数返回多个值

    我正在尝试以下 lua 代码 function test return 1 2 end function test2 return test end function test3 return test 3 end print test p
  • 如何在ios中永远运行后台服务以同步数据

    您好 我正在开发一个应用程序 它需要在网络服务器上进行同步操作 数据提交和检索 用户可以离线提交表单 即将数据存储到设备上的本地数据库 只要网络可用 后台服务就应该将这些数据提交到网络服务器 后台服务具体需求如下 后台服务会先检查网络是否可
  • Bluecove:以编程方式重新启动蓝牙堆栈

    我正在尝试关闭蓝牙服务 但 Bluecove 在连接关闭方法上有错误 https code google com p bluecove issues detail id 90 https code google com p bluecove
  • 如何编写能够验证 URI 的正则表达式模式?

    一个人如何着手创作一部正则表达式与所有有效 URI 字符串匹配 但无法与所有无效 URI 字符串匹配 为了具体说明我在提到 URI 时所指的内容 我在下面添加了最新 URI RFC 标准的链接 它定义了我想要使用正则表达式验证的实体 我不需
  • 如何在cpanel上托管Spring boot应用程序?

    我有一个 Spring boot 应用程序 我想将其托管在我的 VPS 服务器 cpanel 中 我正在使用最新版本的 cpanel 和 WHM 以及 easyapache 4 我完全按照该网站上的步骤操作 https dzone com
  • 在 AWK 脚本输出中的字段周围添加双引号吗?

    我编写了一个 awk 脚本 它将分发器平面文件转换为可导入 Magento 的 CSV 该文件以分号分隔 它没有像进口商要求的那样在每个字段周围加上引号 它工作得相当好 但在没有包含双引号的情况下导致数据导入出现一些问题 我花了几个小时试图
  • 使用 ReactiveCocoa 从对象数组链接异步操作

    我有一个实体数组 我想对这些实体执行异步操作 这些操作应该链接起来 并以与数组中的实体相同的顺序运行 我是 RAC 新手 在 RAC 中如何做到这一点 首先 您需要一个执行异步操作的包装方法 该方法将返回一个信号 我们假设异步操作需要一个完
  • std::max - 需要一个标识符

    我有问题std max 我想不通 int border 35 int myInt 2 int myOtherInt 3 int z std max myInt 2 border myOtherInt 2 border 我已经包含了算法标准头
  • 操作栏后退按钮不起作用

    在这些的帮助下安卓文档 http developer android com training implementing navigation ancestral html NavigateUp 我正在尝试做一个操作栏后退按钮 我得到一个操
  • pyttsx:没有名为“engine”的模块

    我正在尝试使用安装 TTS 包this http pyttsx readthedocs org en latest install html 一切都很好 直到我尝试执行以下命令 import pyttsx 我收到了这个错误 File usr
  • 从 GitHub 更新所有包

    我知道你可以使用以下语法从 CRAN 安装软件包 install packages c Rcpp dependencies TRUE 您可以使用以下命令从 CRAN 更新所有内容 update packages 另一方面 您可以使用以下命令
  • 没有虚拟方法 verifyPhoneNumber,致命异常:main

    将库更新到 Gradle 文件后 我在尝试通过电话号码进行身份验证后遇到此错误 beginning of crash 2020 11 04 00 33 11 574 23042 23042 com roko hearth E Android
  • Terraform:如何有条件地将 EBS 卷分配给 ECS 集群

    我有一个ecs cluster定义 ECS 集群的模块 我希望该模块可以重复使用 这样我就可以创建具有不同配置的各种集群 因此 我希望能够选择指定是否在 ECS 主机的启动配置中创建和附加 EBS 卷 我最初尝试使用count in the
  • Akka 2.1.2 Scheduler 出现问题(“系统”无法识别)

    根据这些示例 我试图运行一个非常简单的循环函数循环 http doc akka io docs akka 2 1 2 scala scheduler html http doc akka io docs akka 2 1 2 scala s
  • 如何在一个项目的不同版本中包含第 3 方代码

    我手上有一个有趣的问题 但我不太清楚处理它的正确方法 这是特定于 sitecore 的 但我想这个问题的解决方案可以应用于拥有多个运行不同版本框架的网站的任何人 现在我有 3 个独立的网站 运行 Sitecore 作为网站的框架和 CMS