首页 / 知识
关于.net:警告:发现同一依赖程序集的不同版本之间存在冲突
2023-04-12 14:51:00

Warning: Found conflicts between different versions of the same dependent assembly我目前正在开发一个.NET应用程序,它包含20个项目。 其中一些项目是使用.NET 3.5编译的,其他一些项目仍然是.NET 2.0项目(到目前为止没问题)。 问题是,如果我包含一个外部组件,我总会得到以下警告:
这个警告究竟是什么意思,是否有可能排除这个警告(比如在源代码文件中使用#pragma disable)?
此警告意味着两个项目引用相同的程序集(例如 重新编译所有项目以使用相同的版本(例如,将所有项目全部移至.Net 3.5)。这是首选选项,因为所有代码都使用它们编译的依赖项版本运行。
添加绑定重定向。这将抑制警告。但是,您的.Net 2.0项目将(在运行时)绑定到依赖程序集的.Net 3.5版本,例如
使用 以下是识别违规参考的几种方法:
基本上,当您引用的程序集将"Copy Local"设置为"True"时会发生这种情况,这意味着DLL的副本与您的exe一起放在bin文件夹中。 由于Visual Studio也会复制引用程序集的所有依赖项,因此最终可能会引用同一程序集的两个不同构建。如果您的项目位于单独的解决方案中,则更有可能发生这种情况,因此可以单独编译。 我得到的方法是将装配项目中的引用设置为Copy Local为False。仅对需要运行成品的程序集的可执行文件/ Web应用程序执行此操作。 希望有道理! 我想发布他们在上面的评论中提供的pauloya解决方案。我相信这是找到违规参考的最佳解决方案。
例如,当您在输出面板中搜索"冲突"时,您可能会发现以下内容:
如您所见,EF版本5和6之间存在冲突。 我的一个项目遇到了同样的问题,但是,上述任何一个都没有帮助解决警告。我检查了详细的构建日志文件,我使用AsmSpy来验证我在受影响的解决方案中为每个项目使用了正确的版本,我仔细检查了每个项目文件中的实际条目 - 没有任何帮助。 最终它发现问题是我在一个项目中的一个引用的嵌套依赖项。该引用(A)又需要不同版本的(B),它直接从我的解决方案中的所有其他项目引用。更新引用项目中的引用解决了它。
我希望以上显示我的意思,花了几个小时才发现,所以希望其他人也会受益。 在Visual Studio上,如果右键单击解决方案并且管理nuget包,则会出现"合并"选项卡,该选项卡将所有包设置为相同的版本。 我刚刚收到此警告消息并清理了解决方案并重新编译(Build - > Clean Solution)并且它消失了。 我有同样的问题,我通过在web.config中更改以下内容来解决。 它发生在我身上,因为我正在使用Newtonsoft.Json 4.0运行应用程序 从:
至:
这实际上取决于您的外部组件。在.NET应用程序中引用外部组件时,它会生成GUID以标识该组件。当您的某个项目引用的外部组件与另一个程序集中的另一个此类组件具有相同名称但版本不同时,会发生此错误。 当您使用"浏览"查找引用并添加错误版本的程序集时,或者您在代码存储库中具有与本地计算机中安装的组件不同的组件版本时,有时会发生这种情况。 尝试查找哪些项目存在这些冲突,从参考列表中删除组件,然后再次添加它们,确保您指向同一文件。 =>检查是否会部分安装某个应用程序实例。 =>首先从卸载应用程序中卸载该实例。 =>然后,清理,重建,并尝试部署。
这解决了我的问题。它也帮助了你。 如果您使用Nuget来管理依赖项,我还有另一种方法可以做到这一点。我发现有时VS和Nuget不匹配,Nuget无法识别您的项目不同步。 packages.config会说一件事,但引用 - 属性中显示的路径将指示其他内容。 如果您愿意更新依赖项,请执行以下操作:
在Solution Explorer中,右键单击Project并单击"Manage"
在左侧窗格中选择"已安装的包"选项卡记录已安装的 卸载您的包。没关系,我们马上就把它们加回来。 立即安装所需的软件包。 Nuget将会做的不仅是为您提供最新版本,还会更改您的参考资料,还会为您添加绑定重定向。 为您的所有项目执行此操作。 在解决方案级别,执行清理和重建。 您可能希望从较低的项目开始,然后按照自己的方式进行更高级别的项目,并在进行时重建每个项目。 如果您不想更新依赖项,则可以使用包管理器控制台,并使用语法Update-Package -ProjectName [yourProjectName] [packageName] -Version [versionNumber] 也有这个问题 - 在我的情况下,它是由于许多引用上的"特定版本"属性设置为true引起的。在这些引用上将此更改为false可解决此问题。 如果使用NuGet,我所要做的就是: 右键单击项目,然后单击Manage NuGet Packages .. 单击右上角的齿轮 单击包源上方的NuGet包管理器中的常规选项卡 在"绑定重定向"中选中"跳过应用绑定重定向" 清洁和重建,警告消失了 十分简单
我只是花了一些时间调试同样的问题。请注意,该问题可能不在不同项目之间,而是在一个项目中依赖于相同dll /程序集的不同版本的多个引用之间。就我而言,问题是参考
在Visual Studio
注意,
我已经卸载
这也发生在我身上。一个dll被引用两次:一次直接(在引用中)和一次间接引用(由另一个引用的项目引用)。 要考虑和检查的另一件事是,确保您没有运行使用该bin文件夹的任何服务。如果他们停止服务并重建解决方案
编辑.resx文件时,Mac Visual Studio上似乎存在问题。 当我的项目引用NETStandardLibrary并且为netcore发布了一个引用的程序集时,我遇到了这样的问题。刚刚将其作为netstandard发布,问题就消失了 就我而言,MySQL引用存在问题。不知何故,我可以列出所有可用参考文献列表中的三个版本; .net 2.0,.net 4.0和.net 4.5。我按照上面的过程1到6进行了操作,它对我有用。 |
最新内容
相关内容
python元类冲突的问题
python元类冲突的问题,培训,冲突,问题,之间,实例,以上,错误,关系,部分,更多,python元类冲突的问题1、子类多重继承时,多个父类之间拥有不同的关于 .net:确定加载的程序集
关于 .net:确定加载的程序集,关于 .net:确定加载的程序集,桌面,加载,应用程序,程序集,Determine Loaded Assemblies如何确定我的 .NET关于Java:大型Maven项目的存储库布
关于Java:大型Maven项目的存储库布局,关于Java:大型Maven项目的存储库布局,模块,结构,应用程序,类似于,Repository layout for large M关于Visual Studio:在具有多个项目
关于Visual Studio:在具有多个项目的解决方案中,如何将VS2008配置为仅打开一个Web服务器?,关于Visual Studio:在具有多个项目的解决方关于svn:在Subversion中为Visual St
关于svn:在Subversion中为Visual Studio项目构建存储库的最佳方法?,关于svn:在Subversion中为Visual Studio项目构建存储库的最佳方法如何在FogBugz中添加“项目描述”?
如何在FogBugz中添加“项目描述”?,如何在FogBugz中添加“项目描述”?,项目,描述,当我,我看,How to add “Project Description” in F关于Java:何时应将多模块项目拆分为
关于Java:何时应将多模块项目拆分为单独的存储库树?,关于Java:何时应将多模块项目拆分为单独的存储库树?,布局,项目,分支,有一个,When sh关于注册表:如何从VS安装项目中注册
关于注册表:如何从VS安装项目中注册COM?,关于注册表:如何从VS安装项目中注册COM?,调用,应用程序,安装,在我,How to register COM from VS关于.net:使用C#3.0编译的C#2.0代码消
关于.net:使用C#3.0编译的C#2.0代码消耗程序集,关于.net:使用C#3.0编译的C#2.0代码消耗程序集,运行,很好,盒子,有一个,C# 2.0 code consumi您对第一个Java EE Spring项目的“
您对第一个Java EE Spring项目的“最佳实践”是什么?,您对第一个Java EE Spring项目的“最佳实践”是什么?,框架,我是,很难,尝试,What关于c#:找不到导入的项目“ C:Microso
关于c#:找不到导入的项目“ C:Microsoft.CSharp.targets”,关于c#:找不到导入的项目“ C:Microsoft.CSharp.targets”,错误,项目,尝试,收关于C#:如何引用多个版本的程序集
关于C#:如何引用多个版本的程序集,关于C#:如何引用多个版本的程序集,自定义,应用程序,添加,页面,How to reference to multiple version