创建和维护具有多个程序集版本作为依赖项的相同代码库(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 和相应的依赖项来创建每个版本特定的项目如下所示:
- 解决方案
Core Project
引用 Newtonsoft.Json v???
- 测试类(源代码)
Project_v1
引用 Newtonsoft.Json v10.0.1
- 测试类(添加为link)
Project_v2
引用 Newtonsoft.Json v11.0.1
- 测试类(添加为link)
Project_v3
引用 Newtonsoft.Json v12.0.1
- 测试类(添加为link)
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
给定以下需要在 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 和相应的依赖项来创建每个版本特定的项目如下所示:
- 解决方案
Core Project
引用 Newtonsoft.Json v???- 测试类(源代码)
Project_v1
引用 Newtonsoft.Json v10.0.1- 测试类(添加为link)
Project_v2
引用 Newtonsoft.Json v11.0.1- 测试类(添加为link)
Project_v3
引用 Newtonsoft.Json v12.0.1- 测试类(添加为link)
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