我目前正在开发一个.NET应用程序,它包含20个项目.其中一些项目是使用.NET 3.5编译的,其他一些项目仍然是.NET 2.0项目(到目前为止没问题).
问题是,如果我包含一个外部组件,我总会收到以下警告:
"Found conflicts between different versions of the same dependent assembly".
Run Code Online (Sandbox Code Playgroud)
这个警告究竟是什么意思,是否有可能排除这个警告(比如在源代码文件中使用#pragma disable)?
Bri*_*Low 400
此警告意味着两个项目引用相同的程序集(例如System.Windows.Forms),但这两个项目需要不同的版本.你有几个选择:
重新编译所有项目以使用相同的版本(例如,将所有项目全部移至.Net 3.5).这是首选选项,因为所有代码都使用它们编译的依赖项版本运行.
添加绑定重定向.这将抑制警告.但是,您的.Net 2.0项目将(在运行时)绑定到.Net 3.5版本的依赖程序集,例如System.Windows.Forms.您可以通过双击Visual Studio中的错误来快速添加绑定重定向.
使用CopyLocal=true.我不确定这是否会抑制警告.它将像上面的选项2一样,意味着所有项目都将使用.Net 3.5版本的System.Windows.Forms.
以下是识别违规参考的几种方法:
Mat*_*ton 43
基本上,当您引用的程序集将"Copy Local"设置为"True"时会发生这种情况,这意味着DLL的副本与您的exe一起放在bin文件夹中.
由于Visual Studio也会复制引用程序集的所有依赖项,因此最终可能会引用同一程序集的两个不同构建.如果您的项目位于单独的解决方案中,则更有可能发生这种情况,因此可以单独编译.
我得到的方法是将装配项目中的引用设置为Copy Local为False.仅对需要运行成品的程序集的可执行文件/ Web应用程序执行此操作.
希望有道理!
use*_*388 31
我想发布他们在上面的评论中提供的pauloya解决方案.我相信这是找到违规参考的最佳解决方案.
查找"违规引用"的最简单方法是设置构建输出详细程度(工具,选项,项目和解决方案,构建和运行,MSBuild项目构建输出详细程度,详细信息),构建后,搜索输出窗口警告.见上面的文字.
例如,当您在输出面板中搜索"冲突"时,您可能会发现以下内容:
3> There was a conflict between "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
3> "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was not.
Run Code Online (Sandbox Code Playgroud)
如您所见,EF版本5和6之间存在冲突.
Gor*_*ger 21
我的一个项目遇到了同样的问题,但是,上述任何一个都没有帮助解决警告.我检查了详细的构建日志文件,我使用AsmSpy来验证我在受影响的解决方案中为每个项目使用了正确的版本,我仔细检查了每个项目文件中的实际条目 - 没有任何帮助.
最终它发现问题是我在一个项目中的一个引用的嵌套依赖项.该引用(A)又需要不同版本的(B),它直接从我的解决方案中的所有其他项目引用.更新引用项目中的引用解决了它.
Solution A
+--Project A
+--Reference A (version 1.1.0.0)
+--Reference B
+--Project B
+--Reference A (version 1.1.0.0)
+--Reference B
+--Reference C
+--Project C
+--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)
Solution B
+--Project A
+--Reference A (version 1.1.1.0)
Run Code Online (Sandbox Code Playgroud)
我希望以上显示我的意思,花了几个小时才发现,所以希望其他人也会受益.
小智 6
我有同样的问题,我通过在web.config中更改以下内容来解决.
它发生在我身上,因为我正在使用Newtonsoft.Json 4.0运行应用程序
从:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
至:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
172254 次 |
| 最近记录: |