Visual studio 在生成时运行Visual Studio自定义工具

Visual studio 在生成时运行Visual Studio自定义工具,visual-studio,msbuild,build-automation,custom-build,Visual Studio,Msbuild,Build Automation,Custom Build,我有一个脚本,可以将文本文件转换为资源文件,这样我就可以通过将不同语言的文本文件转换为不同的资源来获得多语言支持。一旦我运行脚本来获取resx文件,我就必须运行一个自定义构建工具(如下所述:)来创建Designer.cs文件以使用新文件 按照我应该能够通过单击一个按钮来构建整个项目的理念,我如何删除为了生成代码隐藏文件而必须显式调用自定义构建工具的步骤 我已经尝试过作为预构建步骤自动删除Designer.cs文件,因为我认为如果没有Designer.cs文件,但没有骰子,自定义构建工具将自动运行

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

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

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

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


这是最后一步…

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

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

资源的designer.cs文件用于支持您的编码。它们允许您对资源文件进行强类型访问。因此,只要在VS.NET中创建区域性不变资源(并让它创建.designer.cs文件),然后在以后添加其他语言支持(其他.resx文件)就可以了


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

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


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

有一种方法可以在生成过程中为*.resx生成*.Designer.cs。有一个内置的MSBuild任务,它基本上是SDK工具resgen.exe的包装器。你可以找到一个如何使用它的例子

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