C#构建针对强名称程序集

时间:2016-03-31 13:58:43

标签: c# .net .net-assembly assembly-resolution

根据MSDN:

  

针对特定版本构建.NET Framework应用程序时   一个强名称程序集,该应用程序使用该版本的   在运行时装配。

https://msdn.microsoft.com/en-us/library/7wd6ex19(v=VS.100).aspx

问题

有没有办法针对强名命的程序集构建.Net Framework应用程序,以便它在运行时不需要特定的版本? 来自MSDN的引用似乎意味着(“针对特定版本的强名程序集”)

但是如何做到这一点。如何构建强大的命名程序集的非特定版本? 我所做的所有测试都告诉我,如果我构建一个强大的命名程序集,它将始终在运行时需要该版本。 除非我使用Publisher Policys或Assembly Redirects。

更新

但是当我检查这个nuget包时:

https://www.nuget.org/packages/Microsoft.Owin.Security.OAuth

它表示它接受的Newtonsoft.Json大于6.0.4。 我想了解他们是如何做到的?由于Newtonsoft.Json是一个强名称的程序集。我没有看到任何程序集重定向,我认为也没有发布者政策。或者我会错过什么?

1 个答案:

答案 0 :(得分:1)

这是由程序集重定向处理的,正如您已经提到的那样。

数据包管理器本身的NuGet依赖关系管理,而不是程序集引用。您仍然对项目中的引用进行严格绑定,当您最终在同一AppDomain中使用同一程序集的两个版本时,这可能会导致冲突。 NuGet甚至没有尝试解决这个问题。

当出现这种冲突时,您需要回到原点 - 您需要添加绑定重定向。如果这是不可能的(例如,对于程序集的不兼容版本),您需要进行大量有趣的

NuGet用于选择库的最佳版本的策略非常简单:获得尽可能低的主要+次要版本,以及尽可能高的补丁版本(第三个版本号)。同样,这只在更新包时发生,而不是在编译时或运行时。当您有多个具有不同要求的包时,这允许NuGet选择兼容版本的依赖项。但是,它不具有传递性 - 只有在所有引用都在同一个项目中时才有用。如果你引用了NuGet不同版本的依赖项目,你又会回到原来的问题。