使用引用管理器添加或删除引用

可以使用“引用管理器”对话框添加和管理对你、Microsoft或其他公司开发的组件的引用。 如果要开发通用 Windows 应用,项目会自动引用所有正确的 Windows SDK DLL。 创建 .NET 项目时,项目会自动引用它所需的组件,例如 .NET SDK,但在添加功能时需要添加引用。 某些 .NET API 在必须手动添加的组件中公开。 必须手动添加对 COM 组件或自定义组件的引用。

如果 NuGet 包可用于引用的库,请使用 NuGet 包管理器。 请参阅 “安装和使用 NuGet 包”。

“引用管理器”对话框

“引用管理器”对话框显示左侧的不同类别,具体取决于项目类型:

  • 具有框架扩展子组的程序集(仅限 .NET Framework)

  • COM 列出了可用于引用的所有 COM 组件

  • 项目

  • 共享项目

  • 具有核心扩展子组的 Windows。 可以使用 对象浏览器浏览 Windows SDK 或扩展 SDK 中的引用。

  • 使用“最近”子组浏览

    注释

    如果要开发C++项目,则可能看不到“引用管理器”对话框中的 “浏览 ”。

添加引用

  1. 解决方案资源管理器中,右键单击 “引用 ”或“ 依赖项 ”节点,然后从上下文菜单中选择 “添加项目引用”、“ 添加共享项目引用”或 “添加 COM 引用 ”。 (也可以右键单击项目节点,然后从浮出菜单中选择“ 添加 ”以从这些选项中进行选择。

    解决方案资源管理器中上下文菜单中“添加引用”对话框的屏幕截图。

    引用管理器 将打开并按组列出可用引用。

    Visual Studio 中“引用管理器”对话框的屏幕截图。

  2. 选择要添加的引用,然后选择“ 确定”。

    注释

    如果未看到要查找的引用,请选择 “浏览 ”以查找引用。 (如果要开发C++项目,则可能看不到浏览选项。

“程序集”选项卡(仅限 .NET Framework)

注释

程序集 ”选项卡不适用于面向 .NET Core 或 .NET 5 及更高版本的项目。 选择 “浏览 ”以在文件系统中找到程序集,并将其添加为引用。 若要查看项目中引用的程序集,请展开项目中的 “依赖项 ”节点。 在 “依赖项 ”节点中,可以右键单击以添加或删除项目引用、查看或删除 程序集 ,或者打开 NuGet 包浏览器来管理 NuGet 包。 请参阅 NuGet 文档中的 NuGet 包管理器在 Visual Studio 中安装和管理包

对于 .NET Framework 项目,“ 程序集 ”选项卡列出了可用于引用的所有 .NET 程序集。 “ 程序集 ”选项卡不列出全局程序集缓存(GAC)中的任何程序集,因为 GAC 中的程序集是运行时环境的一部分。 如果部署或复制包含对 GAC 中注册的程序集的引用的应用程序,则无论 复制本地 设置如何,该程序集都不随应用程序一起部署或复制。 有关详细信息,请参阅 管理项目中的引用

手动添加对任意 EnvDTE 命名空间(EnvDTEEnvDTE80EnvDTE90EnvDTE90aEnvDTE100)的引用时,请在“属性”窗口中将引用的“嵌入互操作类型”属性设置为False。 将此属性设置为 True 可能会导致生成问题,因为某些无法嵌入的 EnvDTE 属性。

所有桌面项目都包含对 mscorlib 的隐式引用。 Visual Basic 项目包含对 Microsoft.VisualBasic. 的隐式引用。 所有项目都包含对 System.Core 的隐式引用,即使它已从引用列表中删除。

程序集 ”选项卡由两个子表组成:

  1. 框架 列出构成目标框架的所有程序集。

    对于不面向 .NET Core 或通用 Windows 平台的项目, 框架 选项卡枚举目标框架中的程序集。 用户必须添加应用程序所需的任何引用。

    默认情况下,通用 Windows 项目包含对目标框架中所有程序集的引用。 在托管项目中,解决方案资源管理器“引用”文件夹下的只读节点指示对整个框架的引用。 因此, “框架 ”选项卡不会枚举框架中的任何程序集,而是显示以下消息:“所有框架程序集都已引用。 请使用对象浏览器浏览框架中的引用。

  2. 扩展 列出了外部组件和控件供应商为扩展目标框架而开发的所有程序集。 根据用户应用程序的目的,它可能需要这些程序集。

    扩展 是通过在以下位置注册的程序集进行枚举来填充的:

    32 位计算机:

    • HKEY_CURRENT_USER\SOFTWARE\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk ___location of assemblies]
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk ___location of assemblies]

    64 位计算机:

    • HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk ___location of assemblies]
    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\[Target Framework Identifier]\v[Target Framework Version]\AssemblyFoldersEx\[UserComponentName]\@default=[Disk ___location of assemblies]

    较旧版本的 [目标框架标识符]

    例如,如果项目面向 32 位计算机上的 .NET Framework 4, 扩展 枚举在 \Microsoft.NETFramework\v4.0\AssemblyFoldersEx\Microsoft.NETFramework\v3.5\AssemblyFoldersEx\Microsoft.NETFramework\v3.0\AssemblyFoldersEx\Microsoft.NETFramework\v2.0\AssemblyFoldersEx 下注册的程序集

列表中的某些组件可能不会显示,具体取决于项目的框架版本。 这种情况可能发生在以下情况下:

  • 使用最新框架版本的组件与面向早期版本的项目不兼容。

    有关如何更改项目的目标框架版本的信息,请参阅 框架目标概述

  • 使用旧版 .NET Framework 的组件与面向较新的 .NET Framework 的项目不兼容。

有关 .NET Framework 版本之间的版本兼容性的详细信息,请参阅 版本兼容性

应避免在同一解决方案中添加对另一个项目输出的文件引用,因为这样做可能会导致编译错误。 请改用“添加引用”对话框的“项目”选项卡创建项目到项目的引用。 这种做法通过更好地管理项目中创建的类库,简化了团队开发。 有关详细信息,请参阅 对损坏的引用进行故障排除

注释

如果一个项目的目标框架版本为 .NET Framework 4.5 或更高版本,而另一个项目的目标版本是 .NET Framework 2、3、3.5 或 4.0,则创建文件引用而不是项目引用。 有关 .NET、.NET Framework 和 .NET Core 的详细信息,请参阅什么是 .NET(和 .NET Core)。

在“添加引用”对话框中,显示一个程序集

  • 将程序集移动或复制到以下位置之一:

    • 当前项目目录。 (可以使用 “浏览 ”选项卡找到这些程序集。

    • 同一解决方案中的其他项目目录。 (可以使用“ 项目 ”选项卡找到这些程序集。

    - 或 -

  • 设置一个注册表项,指定要显示的程序集的位置:

    对于 32 位操作系统,请添加以下注册表项之一。

    • [HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\<VersionMinimum>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

    • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\<VersionMinimum>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

    对于 64 位操作系统,请在 32 位注册表配置单元中添加以下注册表项之一。

    • [HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\<VersionMinimum>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

    • [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\<VersionMinimum>\AssemblyFoldersEx\MyAssemblies]@="<AssemblyLocation>"

    <VersionMinimum> 是应用的最低框架版本。 如果 <VersionMinimum> 为 v3.0, 则 AssemblyFoldersEx 中指定的文件夹适用于面向 .NET Framework 3.0 及更高版本的项目。

    <AssemblyLocation> 是用于在 添加引用 对话框中显示的程序集目录,例如 C:\MyAssemblies

    HKEY_LOCAL_MACHINE节点下创建注册表项可以使所有用户在“添加引用”对话框中的指定位置看到程序集。 在HKEY_CURRENT_USER节点下创建注册表项只会影响当前用户的设置。

    再次打开 “添加引用 ”对话框。 程序集应显示在 .NET 选项卡上。如果没有,请确保程序集位于指定的 AssemblyLocation 目录中,重启 Visual Studio,然后重试。

“项目”选项卡

项目 ”选项卡在“ 解决方案 ”子选项卡中列出当前解决方案中的所有兼容项目。

项目可以引用面向不同框架版本的另一个项目。 例如,可以创建面向 .NET 8.0 但引用为 .NET 6.0 生成的程序集的项目。 但是,.NET 6.0 项目不能引用 .NET Framework 8.0 项目。 有关详细信息,请参阅 框架目标概述

“共享项目”选项卡

在“引用管理器”对话框的“ 共享项目 ”选项卡上添加对共享项目的引用。 使用共享项目可以编写许多不同应用程序项目引用的常见代码。

通用 Windows 选项卡

“通用 Windows”选项卡列出了特定于运行 Windows作系统的平台的所有 SDK。 此选项卡有两个子组: 核心扩展

核心子组

默认情况下,通用 Windows 应用项目具有对通用 Windows SDK 的引用。 因此,引用管理器中的核心子组不会枚举通用 Windows SDK 中的任何程序集。

扩展子组

扩展 列出了扩展目标 Windows 平台的用户 SDK。

SDK 是 Visual Studio 视为单个组件的文件集合。 在“ 扩展 ”选项卡中,应用于调用引用管理器对话框的项目的 SDK 作为单个条目列出。 添加到项目时,Visual Studio 会使用所有 SDK 内容,以便用户无需采取任何进一步作即可利用 IntelliSense、工具箱、设计器、对象浏览器、生成、部署、调试和打包中的 SDK 内容。

有关如何在“ 扩展 ”选项卡中显示 SDK 的信息,请参阅 “创建软件开发工具包”。

注释

如果项目引用依赖于另一个 SDK 的 SDK,则除非手动添加对第二个 SDK 的引用,否则 Visual Studio 不会使用第二个 SDK。 在“ 扩展 ”选项卡上选择 SDK 时,“引用管理器”对话框通过列出详细信息窗格中的任何依赖项来帮助识别 SDK 依赖项。

如果项目类型不支持扩展,则此选项卡不会出现在“引用管理器”对话框中。

COM 选项卡

COM 选项卡列出了可用于引用的所有 COM 组件。 如果要添加对包含内部清单的已注册 COM DLL 的引用,请先注销 DLL。 否则,Visual Studio 会将程序集引用添加为 ActiveX 控件,而不是作为本机 DLL。

如果项目类型不支持 COM,则选项卡不会出现在“引用管理器”对话框中。

浏览

可以使用 “浏览” 按钮浏览文件系统中的组件或程序集。

项目可以引用面向不同框架版本的组件。 例如,可以创建面向 .NET Framework 4.7.2 但引用面向 .NET Framework 4 的组件的应用程序。 有关详细信息,请参阅 框架目标概述

避免将文件引用添加到同一解决方案中另一个项目的输出,因为此策略可能会导致编译错误。 请改用“引用管理器”对话框的“ 解决方案 ”选项卡创建项目到项目的引用。 这样,通过更好地管理在项目中创建的类库,可以更轻松地进行团队开发。 有关详细信息,请参阅 对损坏的引用进行故障排除

无法浏览到 SDK 并将其添加到项目中。 只能浏览到文件(例如程序集或 .winmd),并将其添加到项目中。

对 WinMD 执行文件引用时,预期的布局是 <FileName.winmd、FileName>>.dll和 FileName.pri 文件都彼此并<置。>< 如果在以下情况中引用 WinMD,将一组不完整的文件复制到项目输出目录中,从而导致生成和运行时失败。

  • 本机组件:本机项目为每个不相交的命名空间集创建一个 WinMD,以及一个由实现组成的 DLL。 WinMD 的名称不同。 在引用该本机组件文件时,MSBuild 无法识别那些名称不同的 WinMD 文件是构成同一个组件的。 因此,仅复制完全相同名称的<FileName>.dll<FileName.winmd>,结果会发生运行时错误。 若要解决此问题,请创建扩展 SDK。 有关详细信息,请参阅 “创建软件开发工具包”。

  • 使用控件:至少,XAML 控件由 <FileName>.winmd<FileName>.dll<FileName>.pri<XamlName>.xaml<ImageName>.jpg 组成。 当项目生成时,与文件关联的资源文件不会复制到项目的输出目录中,仅复制<FileName.winmd><FileName>.dll<FileName.pri>。 记录生成错误,指示缺少 XamlName.xaml> 和 ImageName.jpg资源<>< 若要成功,请将这些资源文件手动复制到项目输出目录中进行生成和调试/运行时。 若要解决此问题,请按照 “创建软件开发工具包 ”中的步骤创建扩展 SDK,或编辑项目文件以添加以下属性:

    <PropertyGroup>
       <GenerateLibraryOutput>True</GenerateLibraryOutput>
    </PropertyGroup>
    

    注释

    如果添加该属性,构建可能会变得较慢。

最近

程序集COMWindows浏览 每个都支持“ 最近 ”选项卡,该选项卡枚举最近添加到项目的组件列表。

“引用管理器”对话框中的搜索栏在当前选中的选项卡上进行操作。 例如,如果在“ 解决方案 ”选项卡处于焦点时在搜索栏中键入“系统”,则搜索不会返回任何结果,除非解决方案包含包含“System”的项目名称。

删除引用

可以使用“删除未使用的引用”菜单项删除 Visual Studio 中 SDK 样式项目的未使用引用。

解决方案资源管理器中上下文菜单中“删除未使用的引用”对话框的屏幕截图。

有关详细信息,请参阅 “删除未使用的引用”。