NuGet包GAC依赖

3
运行我的.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中的ServiceRuntime 2.5.0.0。异常的堆栈跟踪显示我们的某个自定义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 包?
1个回答

3
虽然回答这个问题可能有点晚,但总比不回答好。以下是我的观点:
如果它不向后兼容会发生什么?
您的解决方案将会中断,尽管下一个程序集版本不向后兼容的可能性非常小,您可以使用较新版本的.Net/CLR运行任何旧的.Net程序,最多只会显示弃用消息,并且仅在相当长的时间后才会停止支持,而不是立即停止支持,这种情况下的程序集只有在向后兼容时才是下一个版本,否则它就是一个新的程序集。
为什么Microsoft.WindowsAzure.ServiceRuntime不是NuGet包?
首先了解Nuget存在的原因这里,实质上它只适用于第三方库/扩展。它不适用于核心MS/.Net框架库,其源代码不可用并且不能由外部开发人员修改。
希望这在一定程度上有所帮助。

2
Nuget 绝对不仅仅是为第三方库而设计的。微软甚至在 nuget 上拥有自己的 feed - https://www.nuget.org/profiles/microsoft - 目前包含超过 1100 个软件包。 - Steinar Herland
微软不通过Nuget提供核心的.Net库,链接中提到的库是用于额外功能的可选库,在许多情况下都有第三方竞争对手或可以被覆盖,以修改当前实现。 - Mrinal Kamboj
在我提到的链接中,你会看到很多可以被视为核心的库,例如MVC、WebApi、OData、Razor、Owin和EntityFramework。但是你说得没错,对于某些东西,我们仍然不得不安装SDK。 - Steinar Herland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接