如何:使用引用管理器添加或移除引用

可以使用**“引用管理器”**对话框添加和管理对你、Microsoft 或其他公司开发的组件的引用。如果要开发 Windows 应用商店应用,你的项目将自动引用所有 Windows 8 SDK 和 .NET Framework。如果要开发其他类型的项目,必须将这些引用手动添加到项目。

警告说明警告

可以通过使用“添加引用”对话框在其他类型的项目中添加引用。有关详细信息,请参阅如何:使用“添加引用”对话框添加或移除引用

添加和移除引用

在 C# 或 Visual Basic 项目中添加引用

  1. 在菜单栏上,依次选择**“文件”“打开”**。

  2. 导航到解决方案或项目。

  3. 解决方案资源管理器中,打开项目节点的快捷菜单,然后选择**“添加引用”**。

  4. 指定要添加的引用,然后选择**“确定”**按钮。

若要移除引用,请打开其快捷菜单,然后选择**“移除”**。

在 C++ 项目中添加引用

  1. 在菜单栏上,依次选择**“文件”“打开”**。

  2. 导航到解决方案或项目。

  3. 解决方案资源管理器中,打开项目节点的快捷菜单,然后选择**“引用”**。

  4. 在**“属性页”对话框中,选择“添加新引用”**按钮。

  5. 在**“添加引用”对话框中,指定要添加的引用,然后选择“确定”**按钮。

若要移除引用,请打开其快捷菜单,然后选择**“移除”**。

此时将打开引用管理器,并按组列出可用引用。项目类型确定将显示以下哪一组:

  • “程序集”组,包含“框架”和“扩展”子组。

  • “解决方案”组,包含“项目”子组。

  • “Windows”组,包含“核心”和“扩展”子组。可以使用对象浏览器浏览 Windows SDK 或扩展 SDK 中的引用。

  • “浏览”组,包含“最近”子组。

“程序集”选项卡

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

在添加对任何 EnvDTE 命名空间(EnvDTE、EnvDTE80、EnvDTE90、EnvDTE90a 或 EnvDTE100)的引用时,请在“属性”窗口中将引用的“嵌入互操作类型”属性设置为“False”。将此属性设置为“True”可能会导致生成问题,因为某些 EnvDTE 属性是不能嵌入的。

所有桌面项目都包含对 mscorlib 的隐式引用。Visual Basic 项目包含对 Microsoft.VisualBasic 的隐式引用。在 Visual Studio 2012 中,所有项目都包含对 System.Core 的隐式引用,即使从引用列表中移除了 System.Core 也是如此。

如果项目类型不支持程序集,则此选项卡不会显示在**“引用管理器”**对话框中。

“程序集”选项卡包含两个子选项卡:

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

    • 当你的项目以目标框架的配置文件为目标时,公布的程序集在完整框架中并在“框架”列表中枚举。公布的程序集显示为灰色,以便与项目的目标框架配置文件中存在的程序集区分。例如,如果项目以 .NET Framework 4 Client 为目标,“框架”列表将显示 .NET Framework 4 中的公布程序集。当用户添加公布的程序集时,在**“引用管理器”**对话框关闭后,用户将收到通知,表明项目将重新以 .NET Framework 4 为目标,并将添加公布的程序集。

    • 默认情况下,针对 Windows 应用商店应用的项目在项目创建时包含对目标适用于 Windows 应用商店应用的 .NET 中所有程序集的引用。在托管项目中,解决方案资源管理器中“引用”文件夹下的只读节点指示对整个框架的引用。因此,“框架”选项卡不从框架枚举任何程序集,而是显示以下消息:“已引用所有框架程序集。请使用对象浏览器浏览框架中的引用。”对于桌面项目,“框架”选项卡枚举目标框架中的程序集,用户必须添加应用程序所需的引用。

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

    • “扩展”通过枚举在以下位置注册的程序集来填充:

      32-bit machine:
      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-bit machine:
      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]
      And older versions of the [Target Framework Identifier]
      

      例如,如果项目以 32 位计算机上的 .NET Framework 4 为目标,“扩展”将枚举在 \Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\、\Microsoft\.NETFramework\v3.5\AssemblyFoldersEx\、\Microsoft\.NETFramework\v3.0\AssemblyFoldersEx\ 和 \Microsoft\.NETFramework\v2.0\AssemblyFoldersEx\ 下注册的程序集。

“COM”选项卡

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

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

“解决方案”选项卡

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

一个项目可以引用以不同 .NET Framework 版本为目标的其他项目。例如,可以创建一个以 .NET Framework 4 为目标、但引用针对 .NET Framework 2 生成的程序集的项目。不过,.NET Framework 2 项目不能引用 .NET Framework 4 项目。有关详细信息,请参阅面向特定的 .NET Framework 版本或配置文件

以 .NET Framework 4 为目标的项目与以 .NET Framework 4 Client Profile 为目标的项目不兼容。

在 Visual Studio 2012 中,如果一个项目以 .NET Framework 4 为目标,另一项目以早期版本为目标,则将创建文件引用而非项目引用。

以适用于 Windows 应用商店应用的 .NET 为目标的项目不能添加对以 .NET Framework 为目标的项目的项目引用,反之亦然。

“Windows”选项卡

“Windows”选项卡列出特定于 Windows 操作系统运行所在平台的所有 SDK。

可以通过两种方式在 Visual Studio 中生成 WinMD 文件:

  • Windows 应用商店应用托管项目:Windows 应用商店应用项目可通过设置“项目属性”|“输出类型”=“WinMD 文件”来输出 WinMD 二进制文件。WinMD 文件名必须是其中包含的所有命名空间的超集命名空间。例如,如果项目包括命名空间 A.B 和 A.B.C,则其输出的 WinMD 的可能名称为 A.winmd 和 A.B.winmd。如果用户输入与项目中的命名空间集不相交的“项目属性”|“程序集名称”或“项目属性”|“命名空间值”,或者项目中没有超集命名空间,则将生成警告:“A.winmd”不是此程序集的有效 .winmd 文件名。Windows 元数据文件中的所有类型必须存在于文件名的子命名空间中。无法在运行时查找文件名子命名空间中不存在的类型。在此程序集中,最小的公共命名空间为“CSWSClassLibrary1”。桌面 Visual Basic 或 Visual C# 项目只能使用通过 Windows 8 SDK 生成的 WinMD(也称为第一方 WinMD),无法生成 WinMD。

  • Windows 应用商店应用本机项目:本机 WinMD 文件仅包含元数据。它的实现存在于单独 DLL 文件中。若要生成本机二进制文件,可在**“新建项目”**对话框中选择“Windows 运行时组件”项目模板,或者从空项目开始并修改项目属性以生成 WinMD 文件。如果项目中包含不相交的命名空间,则将出现生成错误,告知用户合并命名空间或运行 MSMerge 工具。

“Windows”选项卡包括两个子组。

“核心”子组

“核心”子组列出目标 Windows 版本的 SDK 中的所有 WinMD(对于 Windows 运行时元素)。

默认情况下,Windows 应用商店应用项目在项目创建时包含对 Windows 8 SDK 中所有 WinMD 的引用。在托管项目中,解决方案资源管理器中“引用”文件夹下的只读节点指示对整个 Windows 8 SDK 的引用。因此,引用管理器中的“核心”子组不从 Windows 8 SDK 枚举任何程序集,而是显示消息:“已引用 Windows SDK。请使用对象浏览器浏览 Windows SDK 中的引用”。

在桌面项目中,默认情况下不显示“核心”子组。若要添加 Windows 运行时,可以打开项目节点的快捷菜单,选择**“卸载项目”,添加以下代码片段,然后重新打开项目(在项目节点上选择“重新加载项目”)。调用“引用管理器”**对话框时,将显示“核心”子组。

  <PropertyGroup>
    <TargetPlatformVersion>8.0</TargetPlatformVersion>
  </PropertyGroup>

确保选中此子组上的**“Windows”**复选框。随后应能使用 Windows 运行时元素。但是,你还需要添加 System.Runtime,Windows 运行时从中定义在整个 Windows 运行库中使用的一些标准类和接口(例如 IEnumerable)。有关如何添加 System.Runtime 的信息,请参阅托管桌面应用和 Windows 运行时

“扩展”子组

“扩展”列出用于扩展目标 Windows 平台的用户 SDK。此选项卡仅针对 Windows 应用商店应用项目显示。桌面项目不显示此选项卡,因为这些项目仅使用第一方 .winmd 文件。

SDK 是文件集合,Visual Studio 将其视为单个组件。在“扩展”选项卡中,应用于调用了**“引用管理器”**对话框的项目的 SDK 将作为单个项列出。添加到项目时,所有 SDK 内容将由 Visual Studio 使用,这样,用户无需采取任何额外操作即可使用 IntelliSense、工具箱、设计器、对象浏览器、生成、部署、调试和打包中的 SDK 内容。有关如何显示“扩展”选项卡中 SDK 的信息,请参阅如何:创建软件开发套件

说明说明

如果项目引用的 SDK 依赖于另一 SDK,则只有在用户手动添加对另一 SDK 的引用后,Visual Studio 才会使用另一 SDK。当用户在“扩展”选项卡上选择 SDK 时,“引用管理器”对话框不仅会列出此 SDK 的名称和版本,还会在详细信息窗格中列出所有 SDK 依赖项的名称,从而帮助用户确定 SDK 依赖项。如果用户未注意到依赖项,仅添加此 SDK,MSBuild 将提示用户添加依赖项。

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

“浏览”按钮

可以使用**“浏览”**按钮浏览查找文件系统中的组件。

一个项目可以引用以不同 .NET Framework 版本为目标的组件。例如,可以创建以 .NET Framework 4 Client Profile 为目标,并引用以 .NET Framework 2 为目标的组件的应用程序。有关详细信息,请参阅面向特定的 .NET Framework 版本或配置文件

应当避免添加对同一解决方案中另一项目的输出的文件引用,因为这种做法可能导致编译错误。而应使用**“引用管理器”对话框的“解决方案”**选项卡来创建项目到项目的引用。这种做法可以更好地管理在项目中创建的类库,从而更易于进行团队开发。有关详细信息,请参阅有关无效的引用的疑难解答

无法浏览到 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>
    
    说明说明

    如果添加属性,生成可能会运行较慢。

Recent

“程序集”、“COM”、“Windows”和“浏览”均支持“最近”选项卡,此选项卡可枚举最近添加到项目的组件的列表。

搜索

**“引用管理器”对话框中的搜索栏在具有焦点的选项卡上运行。例如,在“解决方案”**选项卡具有焦点时,如果用户在搜索栏中键入“System”,则除非解决方案具有包含“System”的项目名称,否则搜索不会返回任何结果。

请参见

任务

如何:使用“添加引用”对话框添加或移除引用

概念

管理项目引用