查找未使用/不必要的 assemblyBinding 重定向

Find unused / unnecessary assemblyBinding redirects

我们的 web.config 中似乎有太多的绑定重定向,我要么:

  1. 看起来没必要
  2. 用于我在我们的解决方案中没有看到任何地方被引用的程序集

这只是部分绑定重定向的示例:

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Azure.KeyVault.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
  </dependentAssembly>
  <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>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
    <bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="14.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.4.0" newVersion="5.2.4.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.ApplicationInsights" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.5.1.0" newVersion="2.5.1.0" />
  </dependentAssembly>

我认为在某些时候 Visual Studio 决定自动添加很多。

有没有办法验证是否需要任何绑定重定向或自动验证/删除它们?

其中大部分是作为默认模板的一部分添加的。 您可以根据您在应用程序中的需要,从绑定和项目引用中安全地删除其中的许多内容。这样,如果不小心将它们用作某个地方的依赖项,您将立即了解。 例如:-

  • "Microsoft.ApplicationInsights": 审核申请
  • System.Web.Helpers:Html MVC 的助手
  • System.ValueTuple:作为数据结构的元组,您可以通过名称
  • 访问每个 属性
  • System.Threading.Tasks.Extensions:TPL 扩展方法
  • Microsoft.SqlServer.Types:在 SQL 服务器中注册的数据类型直接在应用程序代码中使用
  • Microsoft.Owin.Security: Owin 作为身份管理
  • Microsoft.Data.Edm: Entity framework 数据建模
  • Microsoft.Data.OData:开放数据服务

请注意,当您的代码最初 referred/requested 是旧版本而您提供的是较新版本时,专门使用绑定重定向。如果使用的版本实际上与提供的版本相同(主要用于主要框架组件(而不是 NuGet 提供的更新),您可以完全删除 bindingRedirect 部分..

为了安全起见,注释掉每个部分然后 运行 应用程序,如果不起作用,您可以取消注释该部分。

这个问题的解决方案实际上非常简单和优雅。

  1. 删除所有 您在 Web.config / app.config;
  2. 中的绑定重定向
  3. 转到包管理器控制台
  4. 输入命令Add-BindingRedirect(也可以使用-ProjectName "SpecificProject"指定目标项目);
  5. 已生成所有必要的绑定重定向;
  6. 运行 您的应用程序并查看它是否正常工作。如果没有,请添加命令遗漏的任何遗漏的绑定重定向。