Ale*_*ill 2 dll dependencies nuget
我已经创建了一个包(AutoFixture)的扩展,它实现了它的一个接口ICustomization.我发布了NuGet包,其中包含引用AutoFixture 3.16版的已编译二进制文件.
在包含对AutoFixture 3.18版的引用的项目中使用时,ICustomization不能使用实现该接口的类.给出的编译错误是MyCustomization is not assignable to ICustomization.
通过下载和编译源代码到我的扩展,更新AutoFixture引用,并将其包含在新项目中,编译器错误消失了.
我本以为只有一个小版本增量(保持向后兼容性),这不会是一个问题.
为什么我的NuGet包只能与这个版本的AutoFixture一起使用,是否可以在NuGet下发布一个二进制文件,它可以处理所有次要版本增量(即不会破坏向后兼容性的那些)?
这是.NET 中类型标识的结果.类型不仅由其名称空间名称和类型名称标识,还包括它来自的程序集.框架中称为"程序集限定类型名称"的东西.我可以通过一些示例程序演示它:
using System;
class Program {
static void Main(string[] args) {
Console.WriteLine(typeof(IDisposable).AssemblyQualifiedName);
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
System.IDisposable,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089
注意如何包含[AssemblyVersion].检查所有四个数字,具有Version = 4.0.0.1的类型不兼容并生成您获得的编译器错误消息.这是对你的代码造成严重破坏的,作者修改了他的Properties\AssemblyInfo.cs文件,它现在读取:
[assembly: AssemblyVersion("3.18.3.0")]
Run Code Online (Sandbox Code Playgroud)
4月13日从AssemblyVersion("3.18.2.0")更改.版本3.18.2.0在4月12日签到,它只存活了一天:)通过历史记录,作者经常更改版本,平均每月几次.版本3.16.0.0于2013年11月30日发布.自那时起,他已经改变了14次.相比之下,Microsoft在过去9 年中仅更改了IDisposable的版本号一次.
你当然不可能跟上.
您应该与作者联系,让他知道这件事.尽管如此,他可能很难说出来.您需要使用绑定重定向来处理此问题.轻轻触及本文约的NuGet版本.可以使用Add-BindingRedirect powershell命令完成. 本文介绍如何自动运行它.
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |