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

Jak*_*sky 7 c# web-config assemblybinding assembly-binding-redirect

似乎在我们的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>
Run Code Online (Sandbox Code Playgroud)

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

有没有一种方法可以验证是否需要任何绑定重定向,也可以自动验证/删除它们?

Jak*_*sky 12

解决方案实际上是非常简单而优雅的。

  1. web.config / app.config中删除所有绑定重定向
  2. 转到程序包管理器控制台
  3. 输入Add-BindingRedirect
  4. 生成所有必要的绑定重定向
  5. 运行您的应用程序,看看它是否正常运行。如果不是,请添加软件包控制台丢失的任何缺少的绑定重定向。

  • `Add-BindingRedirect *` 用于多项目解决方案 (10认同)

Nit*_*ngh 5

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

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

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

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