25

我有一个将文本文件转换为资源文件的脚本,这样我就可以通过将不同语言的文本文件转换为不同的资源来支持多种语言。运行脚本以获取 resx 文件后,我必须运行自定义构建工具(如此处所述:链接到代码项目)以创建Designer.cs文件以使用新文件。

按照我应该能够通过单击一个按钮来构建整个项目的理念,我怎样才能删除我必须显式调用自定义构建工具以制作代码隐藏文件的步骤?

我已经尝试自动删除Designer.cs文件作为预构建步骤,因为我认为如果没有 Designer.cs 文件但没有骰子,自定义构建工具会自动运行。

所以,我希望我在 Visual Studio/msbuild 中的构建脚本执行以下操作:1)将文本转换为 resx(完成)2)将 resx 文件移动到适当的目录(完成)3)使用自定义构建工具创建 Designer.cs 文件(未完成)

这是最后一步...

4

3 回答 3

3

不幸的是,我认为没有一种简单的方法可以做到这一点。自定义构建工具仅在 VS.NET 中运行 - 当您从命令行使用 MSBuild 构建项目时,它们不会运行。

一般来说,如果您可以选择将构建工具编写为客户构建工具或 MSBuild 任务,那么每次都选择 MSBuild 任务,因为这些任务将在 VS.NET 和命令行中运行。

资源的 Designer.cs 文件可以支持您的编码。它们为您提供对资源文件的强类型访问。因此,只要您在 VS.NET 中创建文化不变资源(并让它创建 .designer.cs 文件),然后稍后添加额外的语言支持(额外的 .resx 文件)应该可以正常工作。

但是,如果您的文本文件是您的主要资源文件,并且您首先将新的资源字符串添加到这些文本文件中,那么您将需要找到另一种生成 .cs 文件的方法,以允许您针对这些资源进行编码。如果您必须这样做,自己生成 .designer.cs 文件(或类似的文件)不会那么困难。使用 CodeDom 或 T4,您可以使用现有的 .designer.cs 文件作为模板来创建帮助程序类。

于 2009-05-21T20:11:46.327 回答
2

作为构建过程的一部分,有一种方法可以为 *.resx 生成 *.Designer.cs。有一个内置的 MSBuild 任务GenerateResource,它基本上是 SDK 工具 resgen.exe 的包装器。在这里您可以找到如何使用它的示例。

您会发现另一件事很有用,如果生成的 *.Designer.cs 版本不正确,基本上,GenerateResource 任务不会调用所需版本的 resgen.exe,设置属性SdkToolsPath可能会对您有所帮助。

于 2017-04-07T08:22:00.467 回答
0

您是否尝试在您的 csproj 的 Before/AfterBuild 步骤中添加 Exec 步骤?您必须为此手动编辑文件,但这应该可以解决您的问题。

如果您希望在构建之前或之后完成此操作,我并不完全清楚。如果您需要在 Pass1/Pass2 之后的某个时间完成它,您可以直接挂接到目标。尝试查看 Microsoft.Build.Common.Targets 以了解如何执行此操作。

于 2009-05-24T05:35:48.877 回答