如何为VS2012 C#Project执行自定义构建步骤?

时间:2013-09-06 22:46:48

标签: c# visual-studio-2012 msbuild

我们有一个VS2012解决方案,其中包含十几个C#项目。其中一个C#项目使用了一个文本文件,该文件由我们编写的单独的C#工具转换为SQL。我们希望在TXT文件发生更改(发布和调试版本)时,在构建期间自动调用此TXT-2-SQL文件转换。

此外,我们希望Debug构建能够将SQL加载到本地DB中;即,调用我们现有的批处理文件之一populate_db.bat,将SQL文件名作为参数(这只是包装mysql客户端的调用并导致执行SQL)。

最好的方法是什么?

1 个答案:

答案 0 :(得分:6)

根据我自己的研究,我发现了以下选择:

  1. 自定义MSBuild任务 - 创建一个包含实现ITask的类的单独程序集;从我们的csproj中引用它;让这项任务完成上述工作。
  2. 自定义构建工具(单个文件生成器) - 创建一个包含实现IVsSingleFileGenerator的类的单独程序集;在每台开发机器上注册;在我们现有的csproj中上述TXT文件的属性中的“自定义构建工具”项中使用该工具名称
  3. C ++ Makefile项目 - 在空的C++ Makefile project中使用CustomBuild或CustomBuildTool语句;在其他项目文件中包含感兴趣的TXT文件;将该项目添加到解决方案中。
  4. 目标+执行 - 将自定义目标节点添加到现有的csproj:

    < Target Name =“TXT2DB”     AfterTargets = “生成” Condition =“'$(Configuration)'=='Debug'” 输入= “MyTextFile.txt”
    输出= “MySqlFile.sql” Label =“TXT2DB”> < Exec Command =“$(ProjectDir)\ Tools \ txt2sql \ txt2sql.exe MyTextFile.txt MySqlFile.sql”/> < Exec Command =“populate_db.bat MySqlFile.sql”/> < /目标>

  5. 发布后事件 - 使用发布后事件。提到完整性,但在调试和发布时都丢弃了b / c,并且似乎对TXT文件更改不敏感。

  6. 目前,我们已选择#4作为最容易实现和维护解决方案,并满足所有要求。