如何:启用和禁用自动绑定重定向

在 Visual Studio 中编译面向 .NET Framework 4.5.1 和更高版本的桌面应用时,绑定重定向可能会自动添加到应用配置文件中,以替代程序集统一。 如果你的应用或其组件引用同一程序集的多个版本,就会添加绑定重定向,即使你在应用的配置文件中手动指定绑定重定向。 自动绑定重定向功能会影响面向 .NET Framework 4.5.1 或更高版本的桌面应用。 如果尚未显式启用或禁用自动生成绑定重定向,并且升级了现有项目,则会自动启用该功能。

对于 web 应用,当 Visual Studio 遇到绑定冲突时,它会提示你添加绑定重定向来解决冲突。

可以为面向以前版本 .NET Framework(4.5 及更低版本)的现有应用“启用”自动绑定重定向。 如果要手动创作绑定重定向,则可以“禁用”此功能。

重要

从 Visual Studio 2022 开始,Visual Studio 不再包括适用于 .NET Framework 4.0 - 4.5.1 的 .NET Framework 组件,因为这些版本不再受支持。 Visual Studio 2022 及更高版本无法生成面向 .NET Framework 4.0 到 .NET Framework 4.5.1 的应用。 如需继续生成这些应用,可以使用 Visual Studio 2019 或更低版本。

在桌面应用中禁用自动绑定重定向

对于面向 .NET Framework 4.5.1 和更高版本的 Windows 桌面应用,默认已启用自动绑定重定向。 在编译应用时,绑定重定向将添加到输出配置 (app.config) 文件中。 重定向会重写原本可能发生的程序集统一。 不会修改源 app.config 文件。 可以通过修改应用的项目文件,或者在 Visual Studio 中取消选中项目属性中相应的复选框来禁用此功能。

通过项目属性禁用

如果已安装 Visual Studio 2017 版本 15.7 或更高版本,可以在项目的属性页中禁用自动生成的绑定重定向。

  1. 右键单击“解决方案资源管理器”中的项目,再选择“属性” 。

  2. 在“应用程序”页上,取消选中“自动生成绑定重定向”选项。

    如果看不到该选项,则需要在项目文件中手动禁用该功能。

  3. 按 CtrlS 保存更改。

在项目文件中手动禁用

  1. 使用以下方法之一打开项目文件进行编辑:

    • 在 Visual Studio 的“解决方案资源管理器”中选择项目,然后从快捷菜单中选择“在文件资源管理器中打开文件夹”。 在文件资源管理器中,找到项目文件(.csproj 或 .vbproj)并在记事本中将其打开。
    • 在 Visual Studio 的“解决方案资源管理器”中,右键单击该项目并选择“卸载项目”。 再次右键单击已卸载的项目,然后选择“编辑 [projectname.csproj]”。
  2. 在项目文件中,查找以下属性项:

    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    
  3. true 更改为 false

    <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
    

手动启用自动绑定重定向

可以在面向早期 .NET Framework 版本的现有应用中启用自动绑定重定向,或者在系统未自动提示添加重定向的情况下启用此功能。 如果面向较新版本的 .NET Framework,但未获得添加重定向的自动提示,则可能获得建议重新映射程序集的构建输出。

  1. 使用以下方法之一打开项目文件进行编辑:

    • 在 Visual Studio 的“解决方案资源管理器”中选择项目,然后从快捷菜单中选择“在文件资源管理器中打开文件夹”。 在文件资源管理器中,找到项目文件(.csproj 或 .vbproj)并在记事本中将其打开。
    • 在 Visual Studio 的“解决方案资源管理器”中,右键单击该项目并选择“卸载项目”。 再次右键单击已卸载的项目,然后选择“编辑 [projectname.csproj]”。
  2. 将以下元素添加到第一个配置属性组(在 <PropertyGroup> 标记下):

    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    

    下面显示了已插入该元素的示例项目文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProjectGuid>{123334}</ProjectGuid>
        ...
        <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      </PropertyGroup>
      ...
    </Project>
    
  3. 编译你的应用。

在 Web 应用中启用自动绑定重定向

Web 应用的自动绑定重定向实现方式有所不同。 由于必须修改 Web 应用的源配置文件 (web.config),因此绑定重定向不会自动添加到配置文件。 但是,Visual Studio 会通知你绑定冲突,你可以添加绑定重定向来解决此冲突。 由于系统始终会提示你添加绑定重定向,因此你不需要为 Web 应用显式禁用此功能。

若要在 web.config 文件中添加绑定重定向,请执行以下操作:

  1. 在 Visual Studio 中,编译应用,然后检查生成警告。

    Build warning for assembly reference conflicts.

  2. 如果存在程序集绑定冲突,则将显示警告。 双击该警告,或选择该警告并按 Enter。

    此时将显示一个对话框,可在其中将所需的绑定重定向添加到源 web.config 文件。

    Binding redirect permission dialog.

另请参阅