【问题标题】:NuGet package GAC dependencyNuGet 包 GAC 依赖项
【发布时间】:2014-12-19 11:55:54
【问题描述】:

运行我的 .NET 项目时,我收到以下运行时错误:

Could not load file or assembly 'Microsoft.WindowsAzure.ServiceRuntime, Version=2.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

据我了解,Microsoft.WindowsAzure.ServiceRuntime 是 GAC 依赖项,在 NuGet 上不可用。

我的 .NET 项目从 Azure SDK 2.5 引用 2.5.0.0 的 ServiceRuntime。异常的堆栈跟踪显示我们的自定义 NuGet 包之一引用了 2.4.0.0。

查看 NuGet 包的依赖项时,它没有显示 ServiceRuntime,我认为这是因为它是 GAC 引用(NuGet 无法解决的问题):

我发现通过添加以下 web.config 更改,它现在可以工作了:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.5.0.0" newVersion="2.5.0.0" />
</dependentAssembly>

我认为这仅在 2.5.0.0 向后兼容 2.4.0.0 规范时才有效。

问题:

  • 如果不向后兼容会怎样?
  • 为什么Microsoft.WindowsAzure.ServiceRuntime 不是 NuGet 包?

【问题讨论】:

    标签: .net azure web-config nuget azure-service-runtime


    【解决方案1】:

    虽然回答这个问题可能有点晚,但迟到总比没有好。以下是我的看法:

    如果不向后兼容会怎样?

    您的解决方案会中断,尽管下一个版本的程序集不太可能不向后兼容,但您可以使用较新版本的 .Net / CLR 运行任何旧的 .net 程序,最多它会显示弃用消息及其只有在很长一段时间后,它才会像这种情况那样立即停止支持。只有向后兼容的程序集才是下一个版本,否则它就是一个新的程序集。

    为什么 Microsoft.WindowsAzure.ServiceRuntime 不是 NuGet 包?

    首先了解 Nuget here 存在的原因,本质上它仅适用于第 3 方库/扩展。它不适用于核心 MS / .Net 框架库,其源代码不可用且无法由外部开发人员修改。

    希望这在一定程度上有所帮助。

    【讨论】:

    • Nuget 绝对不仅仅适用于第 3 方库。微软甚至在 nuget 有自己的提要 - nuget.org/profiles/microsoft - 目前包含超过 1100 个包。
    • MS 不通过 Nuget 提供核心 .Net 库,链接中提到的库是附加功能的可选库,在许多情况下,这些库有第三方竞争对手或可以覆盖,以修改当前实现
    • 在我提到的链接中,你会看到很多可以被认为是核心的库。 - 例如 MVC、WebApi、OData、Razor、Owin 和 EntityFramework。但是你肯定在某些方面是对的,不幸的是我们仍然需要安装 SDK 的++
    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多