【问题标题】:Wrong version of System.Runtime being packaged打包的 System.Runtime 版本错误
【发布时间】:2016-11-13 10:23:18
【问题描述】:

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

构建步骤是:

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

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

这个错误版本的 System.Runtime 来自哪里?我们如何说服违规的软件/硬件使用正确的版本?

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

它来自哪里,如何解决?

【问题讨论】:

    标签: c# azure nuget azure-cloud-services


    【解决方案1】:

    在寻找有问题的 DLL 方面,您的想法是正确的。您是否有任何可能使用错误版本的依赖 DLL?此外,当在本地运行时,它会在错误窗口中为您提供 dll 冲突警告,让您确定在哪里?查看您的配置文件,看看您是否在重定向部分中引用了 DLL 版本,更新它或创建一个新的以指向最新版本。

    【讨论】:

    • 在编译时没有冲突消息,只有在部署到 Azure 时才会在运行时出现。但现在我发现了一些新信息 - 请查看我的问题的更新。
    • 关于我的后一点,在工作人员的 app.config 的重定向部分中是否有对它的引用?如果这说明了一个版本,那么您添加什么并不重要,它会像您在本地拥有旧版本一样工作。因此,为什么它在云中不起作用。
    • app.config 有:<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
    • 那是指新版本 - 但正在部署旧版本,因此问题。
    • 不是,它指的是高达 4.1.1 而不是 4.3.1
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2018-09-27
      相关资源
      最近更新 更多