【问题标题】:C# build against non specific version of strong-named assemblyC# 针对非特定版本的强命名程序集构建
【发布时间】:2016-03-31 13:58:43
【问题描述】:

根据 MSDN:

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

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

问题

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

但是如何做到这一点。如何针对强命名程序集的非特定版本进行构建? 我所做的所有测试都告诉我,如果我针对强命名程序集进行构建,它将在运行时始终需要该版本。 除非我使用发布者策略或程序集重定向。

更新:

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

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

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

【问题讨论】:

  • 如果发布者策略或程序集重定向可以解决您的问题,您为什么要避免它们?
  • Strong-named 表示includes version number。你不能。
  • 好的,谢谢。也许我最初的问题并不完全正确;)。我想了解其他人是如何做到的。也许我只是想念一些东西。刚刚更新了我的原始问题。

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


【解决方案1】:

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

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

当发生冲突时,您又回到了原点 - 您需要添加绑定重定向。如果这是不可能的(例如,对于不兼容的程序集版本),您将获得很多乐趣

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2011-04-30
    • 1970-01-01
    • 2011-07-04
    • 2011-03-18
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多