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

时间:2018-04-26 07:05:38

标签: c# web-config assembly-binding-redirect assemblybinding

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

  1. 看起来没必要
  2. 适用于我们未在解决方案的任何地方引用的程序集
  3. 这只是绑定重定向的某些部分的示例:

      <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决定自动添加大量的内容。

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

大多数都是作为默认模板的一部分添加的。 您可以根据应用程序中的需要,绑定以及项目引用安全地删除其中的许多内容。这样,如果意外地将它们用作某处的依赖关系,您将立即了解。 例如: -

  • &#34; Microsoft.ApplicationInsights&#34;:审核应用程序
  • System.Web.Helpers:MVC的Html助手
  • System.ValueTuple:作为数据结构的元组,您可以按名称访问每个属性
  • System.Threading.Tasks.Extensions:TPL扩展方法
  • Microsoft.SqlServer.Types:直接在应用程序代码中使用的SQL服务器中注册的数据类型
  • Microsoft.Owin.Security:Owin as identity management
  • Microsoft.Data.Edm:实体框架数据建模
  • Microsoft.Data.OData:开放数据服务

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

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