16

似乎我们的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 决定自动添加很多。

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

4

2 回答 2

42

对此的解决方案实际上非常简单和优雅。

  1. 删除Web.config / app.config中的所有绑定重定向;
  2. 转到包管理器控制台
  3. 输入命令Add-BindingRedirect(也可以使用 指定目标项目-ProjectName "SpecificProject");
  4. 生成所有必要的绑定重定向;
  5. 运行您的应用程序并查看它是否正常工作。如果没有,请添加命令遗漏的任何缺少的绑定重定向。
于 2019-01-31T11:23:31.747 回答
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 部分。

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

于 2018-04-26T10:00:25.670 回答