当我清理然后构建包含多个项目的解决方案时,输出窗口会报告构建成功 . 但是,当我查看错误列表窗口时,它会显示此警告:
找到无法解析的相同从属程序集的不同版本之间的冲突 . 当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出 . 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 回答
重申@elshev的评论之一右键单击解决方案 - >管理NuGet软件包以获得解决方案 - >在Consolidate下,您可以查看是否安装了相同软件包的不同版本 . 在那里更新包 . 冲突错误已解决 .
我可以使用nugget包解决这个在Web项目中安装Newtonsoft Json的问题
迁移到Package Reference后我收到了此警告 . 在诊断输出中,有相关库本身引用库的信息 . 它可能是新的Package Reference的错误 . 解决方案是启用AutoGenerateBindingRedirects并删除自定义绑定重定向 .
我发现,有时,nuget软件包将安装(我猜的是).NET Core所需的组件或与已安装的框架冲突的其他项目 . 我的解决方案是打开项目(.csproj)文件并删除这些引用 . 例如,当通过最近安装的一些NuGet包包含Microsoft.Bcl时,往往会添加System.IO,System.Threading等 . 我的项目中没有特定版本的特定版本,所以我删除了引用和项目构建 . 希望有所帮助 .
您可以在项目文件中搜索“参考”并删除冲突 . 如果他们被包含在系统中,那么摆脱它们,构建应该可行 . 这可能无法回答这个问题的所有情况 - 我确定你知道什么对我有用:)
我注释掉的例子:
你可能需要reinstall或升级你的NuGet包来解决这个问题 .
如果您对包进行了任何更改 - 重新打开sln . 这对我有用!
根据其他答案,将输出日志记录级别设置为详细信息并在那里搜索冲突,这将告诉您下一步的位置 .
在我的情况下,它向我发送了几个方向寻找引用的来源,但最终结果发现问题是我的一个可移植的类库项目,它的目标是错误的版本并且正在拉动自己的引用的版本,因此冲突 . 一个快速的重新目标和问题得到了解决 .
改变visual studio中的构建详细程度将有助于指向正确的方向 . 按照以下步骤更改VS中的详细程度
检查VS中的输出窗口(cntl alt o)以了解构建中的更改
我正在使用Visual Studio 2017并在更新一些Nuget包时遇到了这个问题 . 对我有用的是打开我的
web.config
文件并找到<runtime><assemblyBinding>
节点并删除它 . 保存web.config
并重建项目 .看看
Error List
窗口 . 你会看到关于绑定冲突的长期警告 . 双击它,它将自动使用正确的映射重新创建<runtime><assemblyBinding>
块 .我将MSBuild详细程度更改为Diagnostic.but无法找到问题所在,根据上面的答案我在app.config中有这个代码:
所以我刚刚将第一个System,Version从4.0.0.0更改为12.0.0.0,我的项目工作正常 .
虽然其他回答说这个,但他们没有说明,所以我会......
在VS2013.2上,要实际触发引用信息的发送,您需要不读取消息,其中说:
这是不正确的(或者至少是某些版本的Visual Studio - 在最新的VS2015 Update 3或更高版本中似乎没问题) . 而是将其转换为 Diagnostic (从工具 - >选项 - >项目和解决方案 - >构建和运行,设置MSBuild项目构建输出详细程度),然后您将看到如下消息:
然后
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 :)
如dotnet CLI issue 6583中所述,该问题应使用
dotnet nuget locals --clear all
命令解决 .我跑了将包从nuget切换到本地引用的dll之后的问题和问题 . 问题是
app.config
中的旧运行时绑定内容 .显然,有很多不同的原因,因此有很多解决这个问题的方法 . 为了使我的混合,我们将以前在我们的Web项目中直接引用的程序集(System.Net.Http)升级到由NuGet管理的版本 . 这删除了该项目中的直接引用,但我们的Test项目仍包含直接引用 . 升级这两个项目以使用NuGet管理的程序集解决了该问题 .
我只能通过比较显示的两条消息来支持Ruben的回答:
和消息:
所以,鲁本是对的 - 这不是真的 . 没有任何冲突,只是缺少装配 . 当项目是ASP.NET应用程序时,这尤其无聊,因为视图编译为 on demand ,即在第一次显示之前 . 这是必须使组件可用的时候 . (可以选择将视图与其余代码一起预编译,但这是another story . )另一方面,如果将详细程度设置为 Diagnostic ,则会得到以下输出:
因此,您需要做的就是:
手动添加对程序集的引用(在磁盘上找到它,也许是GAC,并将其添加为"direct"引用),或者
使用NuGet包(如果在图库中发布)下载并引用其中包含的程序集 .
有关NuGet gallery here的更多信息 . 有关预编译ASP.NET视图here的更多信息 .
我从管理NuGet Packagaes卸载了Microsoft ASP.NET MVC nuget.org并再次重新安装它 . 重新安装时解决了与剃刀版本相关的所有冲突 . 试试吧 .
通过程序包管理器控制台运行
Update-Package
命令这将修复MSB3277,它将所有包及其随附的所有相关程序集重新安装到 highest version possible . 也可以只更新特定的包 . 或者如果需要更新后降级,这个固定的问题对我来说几次就出现了 . 根据您拥有的nuget包数量,此过程可能需要几分钟时间 .
关于官方文档的更多信息https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages
运行
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都可以选择,它也是无版本的 .
VS
在具有
/v:diag
详细程度的MSBuild日志中,它看起来如下所示 . 提供两个引用冲突的细节: -