多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# /reference (C# Compiler Options) **/reference** 选项导致编译器将指定文件中的 [公开](https://msdn.microsoft.com/zh-cn/library/yzh058ae.aspx) 类型信息导入到当前项目中,从而使您可以从指定的程序集文件引用元数据。 ## 语法 ``` /reference:[alias=]filename /reference:filename ``` ## 参数 _filename_ 包含程序集清单的文件的名称。若要导入多个文件,请为每个文件包括一个单独的 **/reference** 选项。 _alias_ 一个有效的 C# 标识符,表示将包含程序集中所有命名空间的根命名空间。 ## 备注 若要从多个文件导入,请为每个文件包括一个 **/reference** 选项。 导入的文件必须包含一个清单;输出文件必须已使用 [/目标:模块](https://msdn.microsoft.com/zh-cn/library/58scf68s.aspx) 以外的 [/目标](https://msdn.microsoft.com/zh-cn/library/6h25dztx.aspx) 选项之一编译过。 **/r** 是 **/reference** 的缩写形式。 使用 [/addmodule](https://msdn.microsoft.com/zh-cn/library/1s46f83c.aspx) 从不包含程序集清单的输出文件导入元数据。 如果您引用了一个程序集(程序集 A),其本身又引用了另一个程序集(程序集 B),则在下列情况下需要引用程序集 B: * 使用来自程序集 A 的类型继承自程序集 B 中的类型或实现程序集 B 中的接口。 * 调用具有程序集 B 中的返回类型或参数类型的字段、属性、事件或方法。 使用 [/lib](https://msdn.microsoft.com/zh-cn/library/s5bac5fx.aspx) 指定一个或多个程序集引用所在的目录。 **/lib** 主题还讨论了编译器在哪些目录中搜索程序集。 为使编译器可以识别程序集(而不是模块)中的某个类型,需要强制解析此类型,这可以通过定义此类型的实例来完成。还有其他方法可为编译器解析程序集中的类型名称:例如,如果您从程序集中的类型继承,编译器就能识别类型名称。 有时必须从一个程序集内部引用同一组件的两个不同版本。为此,请在每个文件的 **/reference** 开关上使用 alias 子选项,以区分两个文件。此别名将用作组件名称的限定符,并解析为其中一个文件中的组件。 默认情况下使用 csc 响应 (.rsp) 文件,该文件引用常用的 .NET Framework 程序集。如果希望编译器不要使用 csc.rsp,请使用 [/noconfig](https://msdn.microsoft.com/zh-cn/library/8hww4s6c.aspx)。 | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 在 Visual Studio 中,请使用**“添加引用”**对话框。有关更多信息,请参见[如何:使用“添加引用”对话框添加或移除引用](https://msdn.microsoft.com/zh-cn/library/wkze6zky.aspx)。在 Visual Studio 2010 和更高版本中,若要确保通过使用 **/reference** 添加引用与通过使用**“添加引用”**对话框添加引用之间的行为等效,必须将您要添加的程序集的**“嵌入互操作类型”**属性设置为**“False”**。 **“True”**为该属性的默认值。 | ### 示例 本示例演示如何使用[外部别名](https://msdn.microsoft.com/zh-cn/library/ms173212.aspx)功能。 编译源文件,并从先前已编译的 grid.dll 和 grid20.dll 中导入元数据。这两个 DLL 包含同一组件的不同版本,您将使用两个带有别名选项的 **/reference** 编译源文件。这两个选项如下所示: /reference:GridV1=grid.dll 和 /reference:GridV2=grid20.dll 这将设置外部别名“GridV1”和“GridV2”,您将在程序中通过外部语句使用它们: ``` extern alias GridV1; extern alias GridV2; // Using statements go here. ``` 完成此操作后,您可以通过在控件名称前添加 GridV1 前缀来引用 grid.dll 中的网格控件,如下所示: ``` GridV1::Grid ``` 此外,您可以通过在控件名称前添加 GridV2 前缀来引用 grid20.dll 中的网格控件,如下所示: ``` GridV2::Grid ``` ## 请参阅 [C# Compiler Options](https://msdn.microsoft.com/zh-cn/library/2fdbz5xd.aspx) [如何:修改项目属性和配置设置](https://msdn.microsoft.com/zh-cn/library/z15yzzew.aspx)