我正在尝试将我的解决方案中的所有 DLL 版本与许多项目同步。我注意到我的 app.config 包含几个程序集绑定重定向,如下所示:
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.1" newVersion="4.0.2.1" />
</dependentAssembly>
但是,据我通过 NuGet 包管理器所知,没有任何包需要合并,并且所有项目都指向该程序集的版本 4.4.1
我尝试遵循的建议这篇博文 https://blog.maartenballiauw.be/post/2014/11/27/could-not-load-file-or-assembly-nuget-assembly-redirects.html。我删除了所有绑定重定向并尝试通过以下方式重新生成:
获取项目-全部|添加绑定重定向
根据NuGet 文档 https://learn.microsoft.com/en-us/nuget/tools/powershell-reference#Add-BindingRedirect Add-BindingRedirect
应检查项目的输出路径。我假设这意味着 bin 文件夹。
但经过清理和重建后Get-Project -All | Add-BindingRedirect
仍然在我的中产生相同的重定向app.config
.
NuGet 在哪里Get-Project -All | Add-BindingRedirect
获取它的版本号?
这些不正确的 NuGet 包版本可能来自哪里?
是的Add-BindingRedirect
adds <assemblyBinding>
即使清除输出文件夹中的所有文件后,也会将标签添加到配置文件(似乎文档在这方面不准确!!)。
显然Add-BindingRedirect
扫描所有引用的 DLL 及其所有依赖项,如果在整个依赖项树中发现任何冲突,则会生成所需的assemblyBinding
s.
Example
如果您有一个名为“MyProject”的 csproj,它引用两个 DLL(来自两个不同的 Nuget 包)
SomePackage.dll
AnotherPackage.dll
两个 DLL 都引用了BasePackage.dll
,但每个都引用了不同版本的BasePackage.dll
, 例如:
-
SomePackage.dll
参考BasePackage.dll
版本 1。
-
AnotherPackage.dll
参考BasePackage.dll
版本 2。
当你跑步时Add-BindingRedirect
命令,它将扫描“MyProject”引用的所有 DLL,并在BasePackage
引用,然后将类似的内容添加到您的配置文件中。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="BasePackage" publicKeyToken="50bd4fe62226aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)