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 引用 2.5.0.0 的 ServiceRuntime。异常的堆栈跟踪显示我们的自定义 NuGet 包之一引用了 2.4.0.0。

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

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.ServiceRuntimeNuGet 包?
4

1 回答 1

3

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

如果它不向后兼容会发生什么?

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

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

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

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

于 2014-12-22T10:20:25.407 回答