【问题标题】:MSBuild.exe gives errors about Nuget package conflicts, what does it mean?MSBuild.exe 给出有关 Nuget 包冲突的错误,这是什么意思?
【发布时间】:2020-10-28 00:22:25
【问题描述】:

在 VS2017 中工作我有一个使用多个 Nuget 包的 C# 项目 .Net 4.6。在我的开发机器上,它在 VS 中构建得很好,我已经测试过它会从完全干净的状态恢复 Nuget 包并正确构建。

在我们的构建机器上,它是使用 MSBuild.exe 构建的,现在一切都出错了。

Build>"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" ".sln" /p:Configuration="发布" /p:Platform="任何 CPU" /p:version=4.2.0.3230 /m " 适用于 .NET 的 Microsoft (R) Build Engine 版本 15.7.179.6572 框架版权所有 (C) Microsoft Corporation。保留所有权利。

我可以看到 /packages 子目录正在按预期填充包,但随后出现如下错误:

'Reference:System.Numerics.Vectors 之间遇到冲突, 版本=4.1.4.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a, 处理器架构=MSIL' 和 “平台:System.Numerics.Vectors.dll”。无法确定获胜者 因为'参考:System.Numerics.Vectors,版本=4.1.4.0, 文化=中立,PublicKeyToken=b03f5f7f11d50a3a, 处理器架构=MSIL' 不存在。 'Platform:System.Numerics.Vectors.dll' 和 '参考:System.Numerics.Vectors,版本=4.1.4.0,文化=中性, PublicKeyToken=b03f5f7f11d50a3a,处理器架构=MSIL'。可以 无法确定获胜者,因为 'Reference:System.Numerics.Vectors, 版本=4.1.4.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL' 不存在。

My project file looks like:
    <Reference Include="System.Numerics" />
    <Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
    </Reference>

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): 警告 MSB3245:无法解析此引用。找不到 程序集“log4net,版本=2.0.8.0,文化=中性, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"。检查到 确保程序集存在于磁盘上。如果需要此参考 通过您的代码,您可能会遇到编译错误。 [] 对于搜索路径“{HintPathFromItem}”。 考虑“packages\log4net.2.0.8\lib\net45-full\log4net.dll”,但它没有 存在。

我的意思是,这里是:

<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
  <HintPath>packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
</Reference>

每个构建都是一个完全干净的构建(它被擦除)所以我可以清楚地看到 Nuget 已经下载了 log4net.dll

我收到了很多这样的问题,但我看不出任何解释为什么,或者从哪里开始寻找解决方案。一切看起来都在它应该在的地方

【问题讨论】:

    标签: c# .net visual-studio msbuild


    【解决方案1】:

    您可以尝试将配置文件中的绑定重定向更改为 log4net 的 2.8.0

    <dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
    

    【讨论】:

    • build 期间是否使用了 app.config?我认为它只在运行时相关?
    • 定位和绑定到程序集的过程在运行时尝试解析对另一个程序集的引用时开始。此引用可以是静态的或动态的。编译器在构建时在程序集清单的元数据中记录静态引用。这是详细说明的链接(docs.microsoft.com/en-us/dotnet/framework/deployment/…
    • 我可以确认这不是原因(实际上我的 app.config 中已经有这个)
    • 我认为你可以在 CMD 中尝试gacutil /i &lt;the path of the dll&gt;(以管理员身份运行)。
    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 2013-04-10
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多