我试图将我的解决方案中的所有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版本
我尝试了this blog post的建议。我删除了所有绑定重定向并尝试通过以下方式重新生成:
Get-Project -All |添加-BindingRedirect
根据NuGet Documentation Add-BindingRedirect
应检查项目输出路径。我假设这意味着bin文件夹。
但清理和重建后,Get-Project -All | Add-BindingRedirect
仍会在我的app.config
中生成相同的重定向。
NuGet Get-Project -All | Add-BindingRedirect
在哪里获得版本号?
这些不正确的NuGet包版本可能来自哪里?
答案 0 :(得分:1)
是的,即使清除了输出文件夹中的所有文件,Add-BindingRedirect
仍将<assemblyBinding>
标记添加到配置文件中(似乎文档在这方面不准确!)。
显然Add-BindingRedirect
扫描所有引用的DLL及其所有依赖关系,如果在整个依赖关系树中发现任何冲突,它会生成所需的assemblyBinding
。
如果您有一个名为“ MyProject”的csproj,它引用了两个DLL(来自两个不同的Nuget包)
SomePackage.dll
AnotherPackage.dll
两个DLL都引用BasePackage.dll
,但是每个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>
答案 1 :(得分:0)
看一下这篇文章
从Visual Studio 2013开始,面向.NET Framework 4.5.1的新桌面应用程序使用自动绑定重定向。这意味着如果两个组件引用同一个强名称程序集的不同版本,则运行时会自动在输出应用程序配置(app.config)文件中将绑定重定向添加到程序集的较新版本。此重定向会覆盖可能发生的装配统一。源app.config文件未被修改。例如,假设您的应用程序直接引用带外.NET Framework组件,但使用的是针对同一组件的旧版本的第三方库。编译应用程序时,会修改输出应用程序配置文件,以包含到较新版本组件的绑定重定向。如果您创建Web应用程序,则会收到有关绑定冲突的构建警告,这反过来会为您提供将必要的绑定重定向添加到源Web配置文件的选项。