如何为 VS2012 C# 项目执行自定义生成步骤

本文关键字:自定义 执行 项目 VS2012 | 更新日期: 2023-09-27 18:30:25

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

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

最好的方法是什么?

如何为 VS2012 C# 项目执行自定义生成步骤

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

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

    <目标名称 之后目标="构建" 条件=" '$(配置)' == '调试' " 输入="我的文本文件.txt">
    输出="MySqlFile.sql"标签="TXT2DB">

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

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