打包的 System.Runtime 版本错误

Wrong version of System.Runtime being packaged

我们已经编写了要部署到 Azure 的服务。这由一个带有 "Worker Role" class 的 DLL 和一个 Azure 云服务项目组成,如下所示:

构建步骤为:

  1. 在 "Release" 配置中构建 ccproj。
  2. 运行 NuGet "spec",然后"pack" 获取.nupkg 文件
  3. 将 .nupkg 文件部署到 Azure 云服务

这一段时间以来一直运行良好,直到我们升级到 .NET 4.6.2 并且还升级了其他几个参考,包括 System.Runtime(现在是 v4.3.1)。现在,尽管我们已经(可能不必要地)添加了对解决方案中 每个 项目的 NuGet 引用,指向 System.Runtime 4.3.1,[=部署的 44=.dll 是旧版本,导致服务上的 DLL 地狱,然后无法 运行。如果我们手动复制 System.Runtime.dll 的正确版本,那么一切都会恢复正常。

System.Runtime 这个不正确的版本是从哪里来的?我们如何说服违规者 software/hardware 使用正确的版本?

更新:小径正在变暖。在我的开发机器上,EventWorker 项目的 bin 文件夹包含 System.Runtime.dll 的正确版本。但是... EventProcessor\obj\debug\EventWorker 文件夹包含旧版本!我删除了 obj 文件夹并重新编译了项目 - 旧版本的 DLL 再次出现。

它来自哪里,如何修复?

您在追捕有问题的 DLL 方面的想法是正确的。您有任何可能使用错误版本的依赖 DLL 吗?另外,当运行在本地时,它会在错误window中给你dll冲突警告,让你识别在哪里?查看您的配置文件,看看您是否在重定向部分中引用了 DLL 版本,更新它或创建一个新的指向最新版本。

好吧,我修复了它,但我不确定为什么会这样。我从 EventWorker 项目中 删除了 System.Runtime 的 NuGet 引用。现在 EventProcessorRole 使用正确版本的 DLL。

我会同时将此标记为答案,但如果有人可以对此行为提供解释,我会给你答案信用...