Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为VS2012 C#项目执行自定义构建步骤?_C#_Visual Studio 2012_Msbuild - Fatal编程技术网

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

如何为VS2012 C#项目执行自定义构建步骤?,c#,visual-studio-2012,msbuild,C#,Visual Studio 2012,Msbuild,我们有一个VS2012解决方案,其中包含十几个C#项目。其中一个C#项目使用文本文件,该文件由我们编写的一个单独的C#工具转换为SQL。每当TXT文件发生更改(发布和调试构建)时,我们希望在构建期间自动调用此TXT-2-SQL文件转换 此外,我们希望调试构建能够将SQL加载到本地数据库中;也就是说,调用我们现有的批处理文件之一,填充_db.bat,使用SQL文件名作为参数(这只是包装对mysql客户端的调用,并导致执行SQL) 最好的方法是什么 根据我自己的研究,我发现了以下选择: 自定义MSB

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

此外,我们希望调试构建能够将SQL加载到本地数据库中;也就是说,调用我们现有的批处理文件之一,填充_db.bat,使用SQL文件名作为参数(这只是包装对mysql客户端的调用,并导致执行SQL)


最好的方法是什么

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

  • 自定义MSBuild任务-创建包含实现ITask的类的单独程序集;参考我们的csproj;让该任务完成刚才描述的工作
  • 自定义构建工具(单文件生成器)-创建一个单独的程序集,其中包含一个实现的类;在每台dev机器上注册;在现有csproj中上述TXT文件属性中的“自定义构建工具”项中使用该工具名称
  • C++Makefile项目-在一个空的文件中使用CustomBuild或CustomBuildTool语句;在其他项目文件中包含感兴趣的TXT文件;将该项目添加到解决方案中
  • Target+Execs-将自定义目标节点添加到现有csproj:

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


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

    请密切关注。它开始时非常简单,只需添加一个预构建事件。但真正重要的是依赖性。您希望确保在更改某种文件时运行自定义生成任务。MSBuild对其一无所知的文件。这反过来又会导致大量其他文件被重建。这是一个很难解决的问题。你还没有给出如何正确解决那个问题的线索。可以理解,这是一个很难解决的问题。Michael Naoumov似乎已经解决了一个理想解决方案的开端…用于*.txt2db的自定义构建工具