Nuget Get-Project -All |在哪里Add-BindingRedirect获取其版本号?

时间:2018-02-09 23:52:07

标签: c# .net visual-studio web-config app-config

我试图将我的解决方案中的所有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包版本可能来自哪里?

2 个答案:

答案 0 :(得分:1)

是的,即使清除了输出文件夹中的所有文件,Add-BindingRedirect仍将<assemblyBinding>标记添加到配置文件中(似乎文档在这方面不准确!)。

显然Add-BindingRedirect扫描所有引用的DLL及其所有依赖关系,如果在整个依赖关系树中发现任何冲突,它会生成所需的assemblyBinding

示例

如果您有一个名为“ MyProject”的csproj,它引用了两个DLL(来自两个不同的Nuget包)

  1. SomePackage.dll
  2. AnotherPackage.dll

两个DLL都引用BasePackage.dll,但是每个DLL都引用BasePackage.dll的不同版本,例如:

  1. SomePackage.dll引用了BasePackage.dll版本1。
  2. 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配置文件的选项。

来源:Click Here to Read More about Binding Information