创建和维护具有多个程序集版本作为依赖项的相同代码库(class 库)

Creating and maintaining same codebase (class library) with multiple assembly versions as dependency

给定以下需要在 class 库项目中维护的源代码:

using Newtonsoft.Json;

namespace Zephyr.SharedProject.Core
{
    public class TestClass
    {
        public TestClass()
        {
            string json = JsonConvert.SerializeObject(new
            {
                PropertyA = 1
            });
        }
    }
}

如果我们的 class 库需要支持不同版本的 Newtonsoft.Json,我们有什么选择?

例如,已知使用 class 库的产品具有以下依赖项:

产品版本 Newtonsoft.Json版本
1 10.0.1
2 11.0.1
3 12.0.1

假设 Newtonsoft.Json 不引入重大变更并且相同的源代码可用于以上所有版本,如何创建和维护 Visual Studio 解决方案以支持以上方案?

我正在考虑拥有一个包含源代码的项目,并通过将源代码添加为 link1 和相应的依赖项来创建每个版本特定的项目如下所示:

1右键单击项目,添加 > 现有项目 > 添加为 Link

具有上述项目结构将使我们能够维护单个文件,并且每个项目都可以有自己的依赖项,这很好,我们也可以对每个项目进行单元测试。

然而,我在定义对 Core Project 的依赖时进退两难,因为它不明确并且会由于缺少引用而在 Visual Studio 中显示编译错误。

我知道绑定重定向会解决消费者端版本不匹配的问题,但我对生产者(class库)角度的解决方案很感兴趣,如果有更好的方法,请赐教,干杯!

可以在 Microsoft Visual Studio 中创建一个 shared project,它充当包含源代码或文件的中央存储库。

项目本身不需要任何参考,然后可以将其添加为特定版本项目的参考。

在编辑器中打开源代码时,可以轻松地在引用项目的上下文之间切换,以确保一切正常,以防因依赖项不同而发生冲突。

最终的项目结构将类似于:

Product version Project type Newtonsoft.Json version
All Shared N/A
1 Class library 10.0.1
2 Class library 11.0.1
3 Class library 12.0.1

P/S:这个功能已经存在了很长一段时间,我最近才发现它,希望所提供的信息对您有所帮助!

额外:channel 9 video - Sharing Code Across Platforms With Visual Studio 2015