3

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

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

最好的方法是什么?

4

1 回答 1

6

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

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

    <Target Name="TXT2DB" AfterTargets="Build" Condition=" '$(Configuration)' == 'Debug' " Inputs="MyTextFile.txt"
    Outputs="MySqlFile.sql" Label="TXT2DB" > <执行命令="$(ProjectDir)\Tools\txt2sql\txt2sql.exe MyTextFile.txt MySqlFile.sql" /> <Exec Command="populate_db.bat MySqlFile.sql" /> </Target>

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

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

于 2013-09-07T22:14:40.053 回答