查找未使用/不必要的 assemblyBinding 重定向
Find unused / unnecessary assemblyBinding redirects
我们的 web.config 中似乎有太多的绑定重定向,我要么:
- 看起来没必要
- 用于我在我们的解决方案中没有看到任何地方被引用的程序集
这只是部分绑定重定向的示例:
<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 部分..
为了安全起见,注释掉每个部分然后 运行 应用程序,如果不起作用,您可以取消注释该部分。
这个问题的解决方案实际上非常简单和优雅。
- 删除所有 您在 Web.config / app.config;
中的绑定重定向
- 转到包管理器控制台;
- 输入命令
Add-BindingRedirect
(也可以使用-ProjectName "SpecificProject"
指定目标项目);
- 已生成所有必要的绑定重定向;
- 运行 您的应用程序并查看它是否正常工作。如果没有,请添加命令遗漏的任何遗漏的绑定重定向。
我们的 web.config 中似乎有太多的绑定重定向,我要么:
- 看起来没必要
- 用于我在我们的解决方案中没有看到任何地方被引用的程序集
这只是部分绑定重定向的示例:
<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 部分..
为了安全起见,注释掉每个部分然后 运行 应用程序,如果不起作用,您可以取消注释该部分。
这个问题的解决方案实际上非常简单和优雅。
- 删除所有 您在 Web.config / app.config; 中的绑定重定向
- 转到包管理器控制台;
- 输入命令
Add-BindingRedirect
(也可以使用-ProjectName "SpecificProject"
指定目标项目); - 已生成所有必要的绑定重定向;
- 运行 您的应用程序并查看它是否正常工作。如果没有,请添加命令遗漏的任何遗漏的绑定重定向。