gpt4 book ai didi

dll - 为什么我的 NuGet 包只能与特定版本的第三方库一起使用?

转载 作者:行者123 更新时间:2023-12-04 20:36:26 25 4
gpt4 key购买 nike

我已经创建了一个扩展包 (AutoFixture),它实现了它的一个接口(interface),ICustomization .我发布了带有编译二进制文件的 NuGet 包,该二进制文件引用了 3.16 版的 AutoFixture。

当在包含对 AutoFixture 版本 3.18 的引用的项目中使用时,实现 ICustomization 的类接口(interface)无法使用。给出的编译错误是 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();
}
}

输出:

System.IDisposable, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

请注意 [AssemblyVersion] 是如何包含的。检查所有四个数字,版本 = 4.0.0.1 的类型不兼容并生成您收到的编译器错误消息。这就是对您的代码造成严重破坏的原因,作者修改了他的 Properties\AssemblyInfo.cs 文件,现在显示为:

 [assembly: AssemblyVersion("3.18.3.0")]

4 月 13 日从 AssemblyVersion("3.18.2.0") 更改。 3.18.2.0版本是4月12日签到的,只存活了一天:) 翻看历史,作者经常换版本,平均一个月换几次。版本 3.16.0.0 于 2013 年 11 月 30 日发布。从那以后他已经更改了 14 次。相比之下,Microsoft 在过去 9 年 中仅更改了一次 IDisposable 的版本号。

你当然不可能跟上。

你应该联系作者,让他知道这件事。不过可能很难说服他。您需要使用绑定(bind)重定向 在您的终端处理这个问题。轻轻触及 this article关于 Nuget 版本控制。这可以用 Add-BindingRedirect 来完成电源外壳命令。 This article展示了如何自动运行它。

关于dll - 为什么我的 NuGet 包只能与特定版本的第三方库一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com