C# 使用同一nuget包的两个不同版本
我想使用两个不同版本的相同库(OpenCVSharp 2.x和OpenCVSharp 3.x) 我将这两个包下载到单独的项目中(我们称之为OCV2Wrapper和OCV3Wrapper),并在我的项目中引用这两个包。我不得不从一个包(2.x)中重命名库并手动引用它们,因为:。我阅读了有关外部别名的文章,并在其中一个包装中使用了外部别名(在我的例子中是2.x)。 但我有一些主要问题:C# 使用同一nuget包的两个不同版本,c#,.net,reference,libraries,C#,.net,Reference,Libraries,我想使用两个不同版本的相同库(OpenCVSharp 2.x和OpenCVSharp 3.x) 我将这两个包下载到单独的项目中(我们称之为OCV2Wrapper和OCV3Wrapper),并在我的项目中引用这两个包。我不得不从一个包(2.x)中重命名库并手动引用它们,因为:。我阅读了有关外部别名的文章,并在其中一个包装中使用了外部别名(在我的例子中是2.x)。 但我有一些主要问题: 我重命名的库不会复制到启动项目构建(引用两个包装器的构建),而是在2.x包装器的构建中 它不起作用,因为它说,即
- 我重命名的库不会复制到启动项目构建(引用两个包装器的构建),而是在2.x包装器的构建中
- 它不起作用,因为它说,即使我从2.x包装器手动复制重命名的库,也无法从2.x包装器中找到类型
我可以认为这两个包都不在nuget中,但我更喜欢3.x来自nuget,2.x版本是手动配置的。好吧,我通过下载2.x包装版本的全部源代码来解决这个问题。 将其名称空间重命名为ABCDEF2,其中ABCDEF是原始名称空间。用我自己的密钥和。。。将其发布到我们的私有nuget服务器。
这是一个蹩脚的解决方案,但除了手动下载原始软件包并使用不同的文件名等直接引用它之外,没有其他方法,因此您失去了nuget的优势。如前所述,引用两个不同版本的nuget软件包没有什么错,只要这些引用是在不同的VisualStudio项目中进行的 但这也是容易的部分结束的地方,但我认为还有一些选择。根据您的需要,我看到以下选项
希望这对您有所帮助,这样您下次就不必修改第三方源代码。您说过您在解决方案中至少创建了三个项目,对吗?您发布的问题仅限于一个项目。您可以将不同版本的nuget包添加到不同的项目中,而不会出现任何问题。只要你的两个项目处理nuget包的代码,并且你在第三个项目中引用了这两个,一切都应该很好,我明白了。但当我这样做(对两个不同的库使用两个包装器)时,在我的可执行程序构建中,我没有2.x包装器中的库(从浏览文件中手动引用并重命名,以防止名称覆盖冲突)确认了该行为,我也没有看到Nuget自动获得较低版本的库耶,这是完全正确的,可能会起作用。对我来说,重构一个包的源代码并用不同的名称空间和包重新构建它要快得多。idI将这个问题标记为一个答案,因为这个问题得到了很多关注,这个解决方案就像一个真正的解决方案。