首页 文章

发现无法解析的相同从属程序集的不同版本之间的冲突

提问于
浏览
293

当我清理然后构建包含多个项目的解决方案时,输出窗口会报告构建成功 . 但是,当我查看错误列表窗口时,它会显示此警告:

找到无法解析的相同从属程序集的不同版本之间的冲突 . 当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出 . C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets

当我双击此消息时,它会打开C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets文件,但我不明白其中的任何内容 .

我正在使用Visual Studio Express 2013进行Web .

如何找出错误以及哪个DLL,以及如何使警告消失?

18 回答

  • 3

    重申@elshev的评论之一右键单击解决方案 - >管理NuGet软件包以获得解决方案 - >在Consolidate下,您可以查看是否安装了相同软件包的不同版本 . 在那里更新包 . 冲突错误已解决 .

  • 3

    我可以使用nugget包解决这个在Web项目中安装Newtonsoft Json的问题

  • 1

    迁移到Package Reference后我收到了此警告 . 在诊断输出中,有相关库本身引用库的信息 . 它可能是新的Package Reference的错误 . 解决方案是启用AutoGenerateBindingRedirects并删除自定义绑定重定向 .

  • 14

    我发现,有时,nuget软件包将安装(我猜的是).NET Core所需的组件或与已安装的框架冲突的其他项目 . 我的解决方案是打开项目(.csproj)文件并删除这些引用 . 例如,当通过最近安装的一些NuGet包包含Microsoft.Bcl时,往往会添加System.IO,System.Threading等 . 我的项目中没有特定版本的特定版本,所以我删除了引用和项目构建 . 希望有所帮助 .

    您可以在项目文件中搜索“参考”并删除冲突 . 如果他们被包含在系统中,那么摆脱它们,构建应该可行 . 这可能无法回答这个问题的所有情况 - 我确定你知道什么对我有用:)

    我注释掉的例子:

    <!-- <Reference Include="System.Runtime, Version=2.6.9.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> -->
      <!-- <HintPath>$(SolutionDir)packages\Microsoft.Bcl.1.1.9\lib\net40\System.Runtime.dll</HintPath> -->
      <!-- <Private>True</Private> -->
    <!-- </Reference> -->
    
  • 415

    然后如何让警告消失?

    你可能需要reinstall或升级你的NuGet包来解决这个问题 .

  • 68

    如果您对包进行了任何更改 - 重新打开sln . 这对我有用!

  • 33

    根据其他答案,将输出日志记录级别设置为详细信息并在那里搜索冲突,这将告诉您下一步的位置 .

    在我的情况下,它向我发送了几个方向寻找引用的来源,但最终结果发现问题是我的一个可移植的类库项目,它的目标是错误的版本并且正在拉动自己的引用的版本,因此冲突 . 一个快速的重新目标和问题得到了解决 .

  • 0

    改变visual studio中的构建详细程度将有助于指向正确的方向 . 按照以下步骤更改VS中的详细程度

    1. Go to Tools->Options menu in VS
    2. Open Projects and Solutions->Build and Run 
    3. Change the value of the MSBuild project build output verbosity. 
       Pick one from Quiet, Minimal, Normal, Detailed and Diagnostic
    

    检查VS中的输出窗口(cntl alt o)以了解构建中的更改

  • 9

    我正在使用Visual Studio 2017并在更新一些Nuget包时遇到了这个问题 . 对我有用的是打开我的 web.config 文件并找到 <runtime><assemblyBinding> 节点并删除它 . 保存 web.config 并重建项目 .

    看看 Error List 窗口 . 你会看到关于绑定冲突的长期警告 . 双击它,它将自动使用正确的映射重新创建 <runtime><assemblyBinding> 块 .

  • 14

    我将MSBuild详细程度更改为Diagnostic.but无法找到问题所在,根据上面的答案我在app.config中有这个代码:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <section name="XbimXplorer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
    </configSections>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    

    所以我刚刚将第一个System,Version从4.0.0.0更改为12.0.0.0,我的项目工作正常 .

  • 0

    虽然其他回答说这个,但他们没有说明,所以我会......

    在VS2013.2上,要实际触发引用信息的发送,您需要不读取消息,其中说:

    C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:发现无法解析的相同从属程序集的不同版本之间发生冲突 . 当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出 .

    这是不正确的(或者至少是某些版本的Visual Studio - 在最新的VS2015 Update 3或更高版本中似乎没问题) . 而是将其转换为 Diagnostic (从工具 - >选项 - >项目和解决方案 - >构建和运行,设置MSBuild项目构建输出详细程度),然后您将看到如下消息:

    “Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”和“Newtonsoft.Json,Version = 6.0.5.17707,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”之间存在冲突 . 选择“Newtonsoft.Json,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”是因为它是主要的并且“Newtonsoft.Json,Version = 6.0.5.17707,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”不是 .

    然后

    • Ctrl-Alt-O 转到构建输出窗口

    • 搜索“ was chosen ”以查找明细 .

    ......是的,对于那些正在查看[诊断]消息细节的人来说,这个无知的消息是there's a convention in town whereby all 6.x versions are, internally Assembly Version 6.0.0.0, i.e. only the SemVer Major component goes into the Assembly Version :)

  • 6

    dotnet CLI issue 6583中所述,该问题应使用 dotnet nuget locals --clear all 命令解决 .

  • 0

    我跑了将包从nuget切换到本地引用的dll之后的问题和问题 . 问题是 app.config 中的旧运行时绑定内容 .

  • 0

    显然,有很多不同的原因,因此有很多解决这个问题的方法 . 为了使我的混合,我们将以前在我们的Web项目中直接引用的程序集(System.Net.Http)升级到由NuGet管理的版本 . 这删除了该项目中的直接引用,但我们的Test项目仍包含直接引用 . 升级这两个项目以使用NuGet管理的程序集解决了该问题 .

  • 2

    我只能通过比较显示的两条消息来支持Ruben的回答:

    enter image description here

    和消息:

    C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3277:发现无法解析的相同从属程序集的不同版本之间发生冲突 . 当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出 .

    所以,鲁本是对的 - 这不是真的 . 没有任何冲突,只是缺少装配 . 当项目是ASP.NET应用程序时,这尤其无聊,因为视图编译为 on demand ,即在第一次显示之前 . 这是必须使组件可用的时候 . (可以选择将视图与其余代码一起预编译,但这是another story . )另一方面,如果将详细程度设置为 Diagnostic ,则会得到以下输出:

    C:\ Program Files(x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3245:无法解析此引用 . 无法找到程序集“System.Web.Razor,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL” . 检查以确保磁盘上存在程序集 . 如果您的代码需要此引用,则可能会出现编译错误 .

    因此,您需要做的就是:

    • 手动添加对程序集的引用(在磁盘上找到它,也许是GAC,并将其添加为"direct"引用),或者

    • 使用NuGet包(如果在图库中发布)下载并引用其中包含的程序集 .

    有关NuGet gallery here的更多信息 . 有关预编译ASP.NET视图here的更多信息 .

  • 0

    我从管理NuGet Packagaes卸载了Microsoft ASP.NET MVC nuget.org并再次重新安装它 . 重新安装时解决了与剃刀版本相关的所有冲突 . 试试吧 .

  • 4

    通过程序包管理器控制台运行 Update-Package 命令

    这将修复MSB3277,它将所有包及其随附的所有相关程序集重新安装到 highest version possible . 也可以只更新特定的包 . 或者如果需要更新后降级,这个固定的问题对我来说几次就出现了 . 根据您拥有的nuget包数量,此过程可能需要几分钟时间 .

    关于官方文档的更多信息https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

  • 0

    运行 msbuild Foo.sln /t:Rebuild /v:diag (来自 C:\Program Files (x86)\MSBuild\12.0\bin )从命令行构建解决方案并获取更多详细信息,然后找到记录警告的 .csproj. 并检查其引用和使用版本不同的相同公共程序集的其他项目的引用 .

    编辑:您还可以直接在VS2013中设置构建详细程度 . 转到 Tools > Options 菜单,然后转到 Projects and Solutions 并将MSBuild详细程度设置为 Diagnostic .

    编辑:很少澄清,因为我自己有一个 . 在我的情况下,警告是由于我使用Resharper提示添加了一个引用而不是Add Reference对话框,即使v4和v12都可以选择,它也是无版本的 .

    <Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
    <Reference Include="Microsoft.Build.Framework" />
    

    VS

    <Reference Include="Microsoft.Build, Version=12.0.0.0, ..." />
    <Reference Include="Microsoft.Build.Framework, Version=12.0.0.0, ..." />
    

    在具有 /v:diag 详细程度的MSBuild日志中,它看起来如下所示 . 提供两个引用冲突的细节: -

    There was a conflict between 
      "Microsoft.Build.Framework, Version=4.0.0.0, ..." and 
      "Microsoft.Build.Framework, Version=12.0.0.0, ...". (TaskId:16)
    
          "Microsoft.Build.Framework, Version=4.0.0.0, ..." was chosen because it was primary and 
          "Microsoft.Build.Framework, Version=12.0.0.0, ..." was not. (TaskId:16)
    
          References which depend on "Microsoft.Build.Framework, Version=4.0.0.0, ..." 
          [C:\...\v4.5.1\Microsoft.Build.Framework.dll]. (TaskId:16)
    
              C:\...\v4.5.1\Microsoft.Build.Framework.dll (TaskId:16)
                Project file item includes which caused reference "C:\...\v4.5.1\Microsoft.Build.Framework.dll". (TaskId:16)
                  Microsoft.Build.Framework (TaskId:16)
    
          References which depend on "Microsoft.Build.Framework, Version=12.0.0.0, ..." 
          [C:\...\v12.0\Microsoft.Build.Framework.dll]. (TaskId:16)
    
              C:\...\v12.0\Microsoft.Build.dll (TaskId:16)
                Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.dll". (TaskId:16)
                  Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)
    
              C:\...\v12.0\Microsoft.Build.Engine.dll (TaskId:16)
                Project file item includes which caused reference "C:\...\v12.0\Microsoft.Build.Engine.dll". (TaskId:16)
                  Microsoft.Build, Version=12.0.0.0, ... (TaskId:16)
    
    C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3277: 
    Found conflicts between different versions of the same dependent assembly that could not be resolved.  
    These reference conflicts are listed in the build log when log verbosity is set to detailed. 
    [C:\Users\Ilya.Kozhevnikov\Dropbox\BuildTree\BuildTree\BuildTree.csproj]
    

相关问题