![]() |
成熟的西装 · html取消地理位置授权,HTML5浏览器定 ...· 1 年前 · |
![]() |
有胆有识的大蒜 · c++ - cmake 找不到使用 ...· 1 年前 · |
![]() |
活泼的围巾 · Surprise:一个Python推荐系统算 ...· 1 年前 · |
![]() |
讲道义的松鼠 · vue中map集合如何添加元素-掘金· 1 年前 · |
我目前正在开发一个由20个项目组成的.NET应用程序。其中一些项目是使用.NET 3.5编译的,其他一些仍然是.NET 2.0项目(到目前为止没有问题)。
问题是,如果我包含一个外部组件,我总是得到以下警告:
发现同一依赖程序集的不同版本之间存在冲突。
这个警告到底是什么意思,有没有可能排除这个警告(就像在源代码文件中使用#杂注停用)?
基本上,当您引用的程序集的"Copy Local“设置为"True”时,就会发生这种情况,这意味着DLL的副本与您的exe一起放在bin文件夹中。
由于Visual Studio还将复制被引用程序集的所有依赖项,因此最终可能会引用同一程序集的两个不同版本。如果您的项目位于不同的解决方案中,则更有可能发生这种情况,因此可以单独编译。
我解决这个问题的方法是将程序集项目中的引用的Copy Local设置为False。只对可执行文件/web应用程序执行此操作,在这些应用程序中,您需要运行最终产品的程序集。
希望这是有意义的!
这实际上取决于您的外部组件。当您在.NET应用程序中引用外部组件时,它会生成一个GUID来标识该组件。当其中一个项目引用的外部组件与另一个程序集中的另一个此类组件具有相同的名称但版本不同时,就会发生此错误。
当您使用"Browse“查找引用并添加错误版本的程序集时,或者代码存储库中的组件版本与本地计算机中安装的组件版本不同时,有时会发生这种情况。
一定要尝试找出哪些项目有这些冲突,从引用列表中删除组件,然后再次添加它们,确保您指向相同的文件。
此警告意味着两个项目引用了相同的程序集(例如
System.Windows.Forms
),但这两个项目需要不同的版本。您有几个选项:
System.Windows.Forms
。你可以在Visual Studio中双击error来快速添加绑定重定向。
CopyLocal=true
。我不确定这是否会抑制警告。与上面的选项2一样,这意味着所有项目都将使用System.Windows.Forms.
的.Net 3.5版本
以下是识别违规引用的几种方法:
我刚刚收到了这条警告消息,清理了解决方案并重新编译(Build -> Clean Solution),它就消失了。
我在我的一个项目中遇到了同样的问题,然而,上面的这些都没有帮助解决这个警告。我检查了详细的构建日志文件,我使用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)
我希望上面的说明说明了我的意思,我花了几个小时才找到答案,所以希望其他人也能从中受益。
这也发生在我身上。一个dll被引用了两次:一次是直接引用(在引用中),另一次是间接引用(由另一个引用的项目引用)。我删除了直接引用,清理和重建了解决方案。问题已修复。
如果你使用Nuget来管理你的依赖关系,我还有另外一种方法。我发现有时候VS和Nuget不匹配,Nuget无法识别您的项目不同步。packages.config将说明一件事,但在引用-属性中显示的路径将说明另一件事。
如果您愿意更新您的依赖项,请执行以下操作:
在解决方案资源管理器中,右键单击项目并单击左侧窗格中的'Manage Nuget Packages'
您可能希望从较低的项目开始,然后一直工作到较高级别的项目,并在进行过程中重新构建每个项目。
如果您不想更新依赖项,那么可以使用包管理器控制台,并使用语法Update-Package -ProjectName yourProjectName -Version versionNumber
在我的例子中,MySQL引用出现了问题。不知何故,我可以在所有可用的参考资料列表中列出它的三个版本;对于.net 2.0,.net 4.0和.net 4.5。我遵循上面的过程1到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>
至:
<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>
同样也有这个问题--在我的例子中,它是由许多引用的"Specific Version“属性设置为true引起的。在这些引用上将其更改为false解决了该问题。
我想发布他们在上面的评论中提供的pauloya的解决方案。我相信这是找到令人不快的引用的最佳解决方案。
要查找什么是“令人不快的引用”,最简单的方法是设置生成输出详细信息(工具、选项、项目和解决方案、生成和运行、MSBuild项目生成输出详细信息),并在生成之后,在输出窗口中搜索警告。查看其正上方的文本。
例如,当您在output面板中搜索"conflict“时,您可能会找到类似以下内容:
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.
如您所见,EF版本5和6之间存在冲突。
在Visual Studio中,如果你右击 solution 和 Manage nuget packages ,就会出现一个 "Consolidate" 标签,它会将所有的软件包设置为相同的版本。
=>检查是否会部分安装应用程序的某些实例。
=>首先从卸载应用程序中卸载该实例。
然后使用=>,清理、重新构建并尝试部署。
这解决了我的issue.hope,对你也有帮助。诚挚的问候。
另一件需要考虑和检查的事情是,确保您没有任何使用bin文件夹的服务正在运行。如果是停止服务并重建解决方案
在编辑.resx文件时,Mac Visual Studio上似乎有一个问题。我真的不知道发生了什么,但当我在我的苹果电脑上编辑一些.resx文件时,我就遇到了这个问题。我在Windows上打开了这个项目,打开了文件,它们就像没有被编辑过一样。所以我编辑了它们,保存了它们,然后一切都开始在Mac上运行了。
当我的项目引用了NETStandardLibrary,并且为netcore发布了一个引用的程序集时,我遇到了这样的问题。我刚把它作为netstandard发布,问题就消失了。
如果使用NuGet,我所要做的就是:
rebuild中单击右上角的齿轮,然后在NuGet包管理器中单击常规选项卡,包源和选中"Skip Applying redirects“
简单易用
我只是花了一些时间来调试同样的问题。注意,这个问题可能不是在不同的项目之间,而是实际上是在一个项目中的几个引用之间,这些引用依赖于同一dll/程序集的不同版本。在我的例子中,问题是引用
FastMember.dll
版本不匹配,它来自单个项目中的两个不同的NuGet包。当我得到一个项目时,它不会编译,因为NuGet包丢失了,并且VS拒绝恢复丢失的包。通过NuGet菜单,我手动将所有NuGets更新到最新版本,也就是出现警告的时候。
在Visual Studio
Tools > Options > Build and Run > MSBuld Project build output verbosity: (set to) Diagnostics.
中,在
Output
窗口中查找行
There was a conflict between
。下面是我得到的输出部分:
1> There was a conflict between "FastMember, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null" and "FastMember, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null". (TaskId:19)
1> "FastMember, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null" was chosen because it was primary and "FastMember, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null" was not. (TaskId:19)
1> References which depend on "FastMember, Version=1.5.0.0, Culture=neutral, PublicKeyToken=null" [C:\Users\ksd3jvp\Source\Temp\AITool\Misra\AMSAITool\packages\FastMember.1.5.0\lib\net461\FastMember.dll]. (TaskId:19)
1> C:\Users\ksd3jvp\Source\Temp\AITool\Misra\AMSAITool\packages\FastMember.1.5.0\lib\net461\FastMember.dll (TaskId:19)
![]() |
讲道义的松鼠 · vue中map集合如何添加元素-掘金 1 年前 |