繁体   English   中英

NuGet包GAC依赖

[英]NuGet package GAC dependency

运行我的.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无法解析的东西):

NuGet Depedencies

我发现通过添加以下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 / CLR运行任何旧的.net程序,最近它会显示弃用消息,它只会在漂亮之后很长一段时间它不会立即停止支持,就像这种情况一样。 只有向后兼容时,程序集才是下一个版本,否则它是一个新程序集。

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

首先了解了的NuGet的存在的理由在这里 ,它在本质上只是针对第三方库/扩展。 它不适用于核心MS / .Net框架库,其源代码不可用且无法由外部开发人员修改。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM