GenerateResource 任务
在 .txt 和 .resx(基于 XML 的资源格式)文件与公共语言运行时二进制 .resources 文件之间进行转换,这些 .resources 文件可以嵌入到运行时二进制可执行文件中或编译到附属程序集中。 此任务通常用于将 .txt 或 .resx 文件转换为 .resource 文件。 GenerateResource 任务在功能上类似于 resgen.exe。
参数
下表描述了 GenerateResource 任务的参数。
Parameter |
说明 |
---|---|
AdditionalInputs |
可选 ITaskItem[] 参数。 包含到此任务执行的依赖项检查的其他输入。 例如,项目和目标文件通常应为输入内容,以确保在更新项目和目标文件的情况下可重新生成所有资源。 |
EnvironmentVariables |
可选 String[] 参数。 指定除了(或者有选择地重写)常规的环境块之外,应传递到生成的 resgen.exe 的环境变量名称-值对的数组。 |
ExcludedInputPaths |
可选 ITaskItem[] 参数。 指定项的数组,这些项指定最新检查期间将从其忽略跟踪输入的路径。 |
ExecuteAsTool |
可选 Boolean 参数。 如果为 true,则将在进程外运行来自相应目标框架的 tlbimp.exe 和 aximp.exe,以生成必要的包装程序集。 此参数允许 ResolveComReferences 多目标。 |
FilesWritten |
可选 ITaskItem[] 输出参数。 包含写入到磁盘的所有文件的名称。 这包括缓存文件(如果有的话)。 此参数对实现 Clean 非常有用。 |
MinimalRebuildFromTracking |
可选 Boolean 参数。 获取或设置一个开关,该开关指定是否将使用跟踪的增量生成。 如果为 true,则打开增量生成;否则将强制重新生成。 |
NeverLockTypeAssemblies |
可选 Boolean 参数。 指定生成的文件(如 .resources 文件)的名称。 如果未指定名称,将使用匹配的输入文件的名称,并会将创建的 .resources 文件放入包含该输入文件的目录中。 |
OutputResources |
可选 ITaskItem[] 输出参数。 指定生成的文件(如 .resources 文件)的名称。 如果未指定名称,将使用匹配的输入文件的名称,并会将创建的 .resources 文件放入包含该输入文件的目录中。 |
PublicClass |
可选 Boolean 参数。 如果为 true,则作为公共类创建强类型的资源类。 |
References |
可选 String[] 参数。 要在 .resx 文件中从中加载类型的引用。 Resx 文件数据元素可能具有 .NET 类型。 读取 .resx 文件时,必须对此类型进行解析。 通常,使用标准的类型加载规则即可成功地解析此类型。 如果您在 References 中提供了程序集,则它们的优先级更高。 此参数对于强类型资源不是必需的。 |
SdkToolsPath |
可选 String 参数。 指定 SDK 工具的路径,如 resgen.exe。 |
Sources |
必选 ITaskItem[] 参数。 指定要转换的项。 传递给此参数的项必须具有下面的某个文件扩展名:
|
StateFile |
可选 ITaskItem 参数。 指定可选缓存文件的路径,该文件用来加速对 .resx 输入文件中的链接进行依赖项检查。 |
StronglyTypedClassName |
可选 String 参数。 指定强类型资源类的类名。 如果未指定此参数,将使用资源文件的基名称。 |
StronglyTypedFilename |
可选 ITaskItem 参数。 指定资源文件的文件名。 如果未指定此参数,将使用类的名称作为基文件名,其扩展名取决于所使用的语言。 例如:MyClass.cs。 |
StronglyTypedLanguage |
可选 String 参数。 指定在为强类型资源生成类源时要使用的语言。 此参数必须与 CodeDomProvider 使用的某一种语言完全匹配。 例如:VB 或 C#。 将值传递给此参数即指示任务生成强类型资源。 |
StronglyTypedManifestPrefix |
可选 String 参数。 指定要在为强类型资源生成的类源中使用的资源命名空间或清单前缀。 |
StronglyTypedNamespace |
可选 String 参数。 指定用于为强类型资源生成的类源的命名空间。 如果未指定此参数,则任何强类型资源都将位于全局命名空间中。 |
TLogReadFiles |
可选 ITaskItem[] 只读参数。 获取项的数组,这些项表示读取跟踪日志。 |
TLogWriteFiles |
可选 ITaskItem[] 只读参数。 获取项的数组,这些项表示写入跟踪日志。 |
ToolArchitecture |
可选 [String] 参数。 用来确定 Tracker.exe 是否需要用来生成 ResGen.exe。 应可以解析 ExecutableType 枚举的成员。 如果为 String.Empty,则使用启发方法来确定默认体系结构。 应可以解析 Microsoft.Build.Utilities.ExecutableType 枚举的成员。 |
TrackerFrameworkPath |
可选 [String] 参数。 指定包含 FileTracker.dll 的相应 .NET Framework 位置的路径。 如果已设置,则用户负责确保他们传递的 FileTracker.dll 的位数匹配他们想要使用的 ResGen.exe 的位数。 如果没有设置,则任务将基于当前的 .NET Framework 版本决定相应的位置。 |
TrackerLogDirectory |
可选 [String] 参数。 指定中间目录,将在该目录中放置运行此任务的跟踪日志。 |
TrackerSdkPath |
可选 [String] 参数。 指定包含 Tracker.exe 的相应 Windows SDK 位置的路径。 如果已设置,则用户负责确保他们传递的 Tracker.exe 的位数匹配他们想要使用的 ResGen.exe 的位数。 如果未设置,则任务将基于当前的 Windows SDK 决定相应的位置。 |
TrackFileAccess |
可选 [Boolean] 参数。 如果为 ture,则使用输入文件的目录来解析相对文件路径。 |
UseSourcePath |
可选 Boolean 参数。 如果为 true,表明将使用输入文件的目录来解析相对文件路径。 |
备注
由于 .resx 文件可能包含指向其他资源文件的链接,因此仅仅通过比较 .resx 和 .resource 文件的时间戳来查看输出是否为最新是不够的。 GenerateResource 任务将遵循 .resx 文件中的链接,同时检查链接文件的时间戳。 这意味着通常不应对包含 GenerateResource 任务的目标使用 Inputs 和 Outputs 特性,因为这样可能会导致当实际上应运行此任务时却跳过了此任务。
除了上面列出的参数,此任务还将从 TaskExtension 类继承参数,此类本身从 Task 类继承。 有关这些附加参数及其说明的列表,请参见 TaskExtension 基类。
当使用 MSBuild 4.0 面向 .NET 3.5 时,生成可能会失败于 x86 资源上。 若要解决此问题,您可以以 AnyCPU 的程序集的形式生成目标。
示例
下面的示例使用 GenerateResource 任务基于 Resx 项集合指定的文件生成 .resources 文件。
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
GenerateResource 任务使用 < EmbeddedResource > 项目的 < LogicalName > 元数据命名程序集中嵌入的资源项。
假定程序集名为 myAssembly,下面的代码将生成名为 someQualifier.someResource.resources 的嵌入式资源:
<ItemGroup> <EmbeddedResource Include="myResource.resx"> <LogicalName>someQualifier.someResource.resources</LogicalName> </EmbeddedResource></ItemGroup>
如果没有 <LogicalName> 元数据,则该资源将命名为 myAssembly.myResource.resources。 此示例仅适用于 Visual Basic 和 Visual C# 生成过程。