以下选项控制 C# 编译器如何创建或导入 Win32 资源。 新的 MSBuild 语法以粗体显示。 旧的 csc.exe 语法以 code style 显示。
-
Win32Resource /
-win32res:指定 Win32 资源文件 (.res)。 -
Win32Icon /
-win32icon:引用来自一个或多个指定程序集文件的元数据。 -
Win32Manifest /
-win32manifest:指定 Win32 清单文件 (.xml)。 -
NoWin32Manifest /
-nowin32manifest:不包括默认的 Win32 清单。 -
EmbeddedResource /
-resource:嵌入指定的资源(短格式:/res)。 -
LinkResource /
-linkresource:将指定的资源链接到此程序集。
注意
有关为项目配置这些选项的详细信息,请参阅 编译器选项。
Win32Resource
Win32Resource 选项会在输出文件中插入 Win32 资源。
<Win32Resource>filename</Win32Resource>
filename 是要添加到输出文件的资源文件。 Win32 资源可以包含有助于在文件资源管理器中标识应用程序的版本或位图(图标)信息。 如果未指定此选项,编译器将基于程序集版本生成版本信息。
Win32Icon
Win32Icon 选项在输出文件中插入.ico文件,从而在文件资源管理器中为输出文件提供所需的外观。
<Win32Icon>filename</Win32Icon>
filename 是要添加到输出文件的 .ico 文件。 可以使用资源编译器创建.ico文件。 编译 Visual C++ 程序时,将调用资源编译器。 从 .rc 文件创建.ico文件。
Win32Manifest
使用 Win32Manifest 选项可以指定用户定义的 Win32 应用程序清单文件,以嵌入项目的可移植可执行文件(PE)文件中。
<Win32Manifest>filename</Win32Manifest>
filename 是自定义清单文件的名称和位置。 默认情况下,C# 编译器会嵌入一个应用程序清单,该清单指定请求的执行级别 asInvoker。 它在生成可执行文件的同一文件夹中创建清单。 如果要提供自定义清单,例如指定请求的执行级别 highestAvailable ,或者 requireAdministrator使用此选项指定文件的名称。
注意
Win32Manifest 选项和 Win32Resource 选项互斥。 如果尝试在同一命令行中使用这两个选项,则会出现生成错误。
没有指定所请求执行级别的应用程序清单的应用程序受Windows用户帐户控制功能下的文件和注册表虚拟化的约束。 有关详细信息,请参阅用户帐户控制。
如果满足以下任一条件,应用程序将受到虚拟化:
- 使用 NoWin32Manifest 选项,并且在随后的生成步骤中未提供清单,或者没有通过使用 Win32Resource 选项将其包含在 Windows 资源 (.res) 文件中。
- 提供的自定义清单未指定请求执行级别。
Visual Studio 创建默认 .manifest 文件,并将它与可执行文件一起存储在“调试”和“发布”目录中。 可以用任意文本编辑器创建一个清单,然后将该文件添加到项目中,从而添加自定义清单。 或者,也可以右键单击解决方案资源管理器中的项目图标,选择添加新项,然后选择应用程序清单文件。 添加新清单或现有清单文件后,它将显示在 “清单 ”下拉列表中。 有关详细信息,请参阅“项目设计器”->“应用程序”页 (C#)。
提供应用程序清单的操作可以作为自定义生成后步骤,也可以通过使用 NoWin32Manifest 选项作为 Win32 资源文件的组成部分。 如果希望应用程序受到 Windows Vista 的文件或注册表虚拟化的影响,请使用该选项。
NoWin32Manifest
使用 NoWin32Manifest 选项可指示编译器不将任何应用程序清单嵌入到可执行文件中。
<NoWin32Manifest />
使用此选项时,除非在 Win32 资源文件或后续生成步骤中提供应用程序清单,否则应用程序将受到Windows Vista上的虚拟化。
在 Visual Studio 的“应用程序属性”页中,通过在“清单”下拉列表中选择“创建不带清单的应用程序”选项来设置此选项。 有关详细信息,请参阅“项目设计器”->“应用程序”页 (C#)。
EmbeddedResource
将指定资源嵌入输出文件。
<EmbeddedResource Include="filename">
<LogicalName>identifier</LogicalName>
<Access>accessibility-modifier</Access>
</EmbeddedResource>
filename 是要嵌入到输出文件的 .NET 资源文件。
identifier (可选)是资源的逻辑名称:用于加载资源的名称。 默认值是文件的名称。
accessibility-modifier(可选)是资源的可访问性:public 或 private。 默认值为 public。 默认情况下,使用 C# 编译器创建资源时,程序集中资源是公共的。 若要使资源变为私有,请将 private 指定为可访问性修饰符。 不允许使用其他辅助功能。 如果是filename创建.NET资源文件,例如,通过 Resgen.exe 或在开发环境中,可以使用命名空间中的System.Resources成员访问该文件。 有关详细信息,请参阅 System.Resources.ResourceManager。 对于所有其他资源,请使用 GetManifestResource 类中的 Assembly 方法在运行时访问资源。 输出文件中资源的顺序来自项目文件中指定的顺序。
LinkResource
在输出文件中创建指向 .NET 资源的链接。 不会在输出文件中添加资源文件。 LinkResource 不同于 EmbeddedResource 选项,该选项在输出文件中嵌入资源文件。
<LinkResource Include="filename">
<LogicalName>identifier</LogicalName>
<Access>accessibility-modifier</Access>
</LinkResource>
filename 是要从程序集链接到的 .NET 资源文件。
identifier (可选)是资源的逻辑名称:用于加载资源的名称。 默认值是文件的名称。
accessibility-modifier(可选)是资源的可访问性:public 或 private。 默认值为 public。 默认情况下,使用 C# 编译器创建链接资源时,程序集中的公共资源。 若要使资源变为私有,请将 private 指定为可访问性修饰符。 不允许使用其他修饰符。 如果是filename创建.NET资源文件,例如,通过 Resgen.exe 或在开发环境中,可以使用命名空间中的System.Resources成员访问该文件。 有关详细信息,请参阅 System.Resources.ResourceManager。 对于所有其他资源,请使用 GetManifestResource 类中的 Assembly 方法在运行时访问资源。
filename 中指定的文件可为任何格式。 例如,你可能希望使程序集的本机 DLL 部分,以便它可以安装到全局程序集缓存中,并从程序集中的托管代码访问。 可在程序集链接器中执行相同的操作。 有关详细信息,请参阅 Al.exe(程序集链接器)和使用程序集和全局程序集缓存。