在构建时运行Visual Studio自定义工具

时间:2009-05-21 19:55:52

标签: visual-studio msbuild build-automation custom-build

我有一个脚本可以将文本文件转换为资源文件,因此我可以通过将不同语言的文本文件转换为不同的资源来支持多种语言。运行脚本以获取resx文件后,我必须运行自定义构建工具(如此处所述:Link to Code Project),以便创建Designer.cs文件以使用新文件。

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

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

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

这是最后一步......

3 个答案:

答案 0 :(得分:3)

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

通常,如果您可以选择将构建工具编写为客户构建工具或MSBuild任务,则每次选择MSBuild任务,因为这些任务将在VS.NET和命令行中运行。

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

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

答案 1 :(得分:2)

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

如果生成的* .Designer.cs版本不正确,你会觉得有用的另一件事,基本上,GenerateResource任务没有调用所需的resgen.exe版本,设置属性SdkToolsPath可能对你有帮助。 / p>

答案 2 :(得分:0)

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

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