代码之家  ›  专栏  ›  技术社区  ›  Dan Friedman

了解Microsoft“发现不同版本之间存在冲突”的生成日志。WindowsAzure。无法解析的存储

  •  8
  • Dan Friedman  · 技术社区  · 6 年前

    Visual Studio 2017(15.5.4)的构建日志让我在如何消除警告方面左右为难

    发现不同版本的“Microsoft.WindowsAzure.Storage”之间存在无法解决的冲突。当log verbosity设置为detailed时,这些引用冲突将列在生成日志中。动物。讨厌的人函数C:\Program Files(x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft。常见的当前版本。目标

    There was a conflict between "Microsoft.WindowsAzure.Storage, Version=7.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" and "Microsoft.WindowsAzure.Storage, Version=8.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".
        "Microsoft.WindowsAzure.Storage, Version=7.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was chosen because it was primary and "Microsoft.WindowsAzure.Storage, Version=8.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" was not.
        References which depend on "Microsoft.WindowsAzure.Storage, Version=7.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" [D:\Repos\Animals\src\Animals.Swine\packages\WindowsAzure.Storage.7.2.1\lib\net40\Microsoft.WindowsAzure.Storage.dll].
            D:\Repos\Animals\src\Animals.Swine\packages\WindowsAzure.Storage.7.2.1\lib\net40\Microsoft.WindowsAzure.Storage.dll
              Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Swine\packages\WindowsAzure.Storage.7.2.1\lib\net40\Microsoft.WindowsAzure.Storage.dll".
                Microsoft.WindowsAzure.Storage, Version=7.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
        References which depend on "Microsoft.WindowsAzure.Storage, Version=8.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" [].
            D:\Repos\Animals\src\Animals.Common\Animals.Common.Functions\bin\Debug\net461\bin\Animals.Common.Functions.dll
              Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Common\Animals.Common.Functions\bin\Debug\net461\bin\Animals.Common.Functions.dll".
                D:\Repos\Animals\src\Animals.Common\Animals.Common.Functions\bin\Debug\net461\bin\Animals.Common.Functions.dll
            D:\Repos\Animals\src\packages\Microsoft.Azure.WebJobs.2.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll
              Project file item includes which caused reference "D:\Repos\Animals\src\packages\Microsoft.Azure.WebJobs.2.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll".
                Microsoft.Azure.WebJobs.Host, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
                Microsoft.Azure.WebJobs.Extensions, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL
            D:\Repos\Animals\src\Animals.Common\Animals.Common\bin\Debug\net45\Animals.Common.dll
              Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Common\Animals.Common\bin\Debug\net45\Animals.Common.dll".
                D:\Repos\Animals\src\Animals.Swine\Animals.Swine\bin\Debug\Animals.Swine.dll
                D:\Repos\Animals\src\Animals.Common\Animals.Common\bin\Debug\net45\Animals.Common.dll
            D:\Repos\Animals\src\Animals.Swine\packages\Microsoft.Azure.WebJobs.Extensions.2.0.0\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll
              Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Swine\packages\Microsoft.Azure.WebJobs.Extensions.2.0.0\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll".
                Microsoft.Azure.WebJobs.Extensions, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL
    

    如果我们仔细查看据称使用存储8.1.1.0的引用,我们会发现第一个、第三个和最后一个都是引用自身。为什么会这样想?这到底是什么意思?

        D:\Repos\Animals\src\Animals.Common\Animals.Common.Functions\bin\Debug\net461\bin\Animals.Common.Functions.dll
          Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Common\Animals.Common.Functions\bin\Debug\net461\bin\Animals.Common.Functions.dll".
            D:\Repos\Animals\src\Animals.Common\Animals.Common.Functions\bin\Debug\net461\bin\Animals.Common.Functions.dll
        ...
        D:\Repos\Animals\src\Animals.Common\Animals.Common\bin\Debug\net45\Animals.Common.dll
          Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Common\Animals.Common\bin\Debug\net45\Animals.Common.dll".
            D:\Repos\Animals\src\Animals.Swine\Animals.Swine\bin\Debug\Animals.Swine.dll
            D:\Repos\Animals\src\Animals.Common\Animals.Common\bin\Debug\net45\Animals.Common.dll
        D:\Repos\Animals\src\Animals.Swine\packages\Microsoft.Azure.WebJobs.Extensions.2.0.0\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll
          Project file item includes which caused reference "D:\Repos\Animals\src\Animals.Swine\packages\Microsoft.Azure.WebJobs.Extensions.2.0.0\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll".
            Microsoft.Azure.WebJobs.Extensions, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL
    

    第二个似乎更适合检查和讨论:

        D:\Repos\Animals\src\packages\Microsoft.Azure.WebJobs.2.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll
          Project file item includes which caused reference "D:\Repos\Animals\src\packages\Microsoft.Azure.WebJobs.2.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll".
            Microsoft.Azure.WebJobs.Host, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
            Microsoft.Azure.WebJobs.Extensions, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL
    

    如果我读对了, Microsoft.Azure.WebJobs.Host, Version=2.1.0.0 Microsoft.Azure.WebJobs.Extensions, Version=2.0.0.0 两者都应该参考 Microsoft.WindowsAzure.Storage, Version=8.1.1.0 . 但是,如果我们看看Nuget依赖项, WebJobs 参考文献 7.2.1.0 WebJobs.Extensions 仅引用[网络作业]。

    我没有看到任何引用 8.1.1.0 ! 存储没有被任何项目直接引用,我也看不到间接引用。

    我已经在“D:\Repos\anives\src\anives.sween\anies.sween.Functions\bin”上运行了AsmSpy,但它甚至没有显示存储冲突。

    我怎样才能知道Storage 8.1.1.0引用来自何处?

    更新:我进行了文本搜索,发现绑定重定向设置为“8.1.1.0”作为新版本。我将其更改为“7.2.1.0”,警告消失了。尽管警告已经消失,但我还是把这个问题留了下来,以便有人能够深入了解如何阅读构建日志,以及这些日志如何为我们指明了正确的方向。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Leo Liu    6 年前

    我怎样才能知道Storage 8.1.1.0引用来自何处?

    构建日志可以帮助我们解决大多数问题,但它并不能解决所有问题。它仍然需要我们手动解决这些问题。因为Visual Studio/MSBuild无法智能地直接找到问题的根本原因。

    遇到此MSB3247/MSB3277错误时,解决此问题的最佳方法是将MSBuild输出日志转换为 诊断的 ( 工具->选项->项目和解决方案->生成并运行,设置MSBuild项目生成输出详细信息 ),然后查找依赖于 Microsoft.WindowsAzure.Storage ,检查是否有不同版本的 微软WindowsAzure。存储 正在引用。

    在构建日志中,我们发现项目文件项包含导致引用的 Microsoft.Azure.WebJobs.2.1.0 Microsoft.Azure.WebJobs.Extensions.2.0.0

    然后检查这两个包的依赖关系,它们都没有引用 Microsoft.WindowsAzure.Storage, Version=8.1.1.0 .

    为了确认这一点,您可以使用弗拉基米尔在评论中提供的方法。

    目前,这种冲突不应该来自参考文献。然后我们应该检查与引用版本相关的文件,例如, app.confi g或 web.config ,查找绑定重定向关于引用 微软WindowsAzure。存储 ,检查绑定重定向是否正确。

    因此,有时我们无法仅根据构建日志信息直接解决问题,手动故障排除也至关重要。