是否可以从自定义任务,以编程方式更改构建项目?

时间:2014-06-01 20:47:10

标签: c# msbuild visual-studio-2013

我有一个自定义任务程序集,它运行在BeforeBuild。

对于原始项目的某些cs文件,我生成了一些gen.cs文件。

我想构建gen​​.cs文件而不是原始的cs文件。

这是否可以完成任务。

用Google搜索,但没有提示......

3 个答案:

答案 0 :(得分:1)

不是将原始 .cs 文件的构建操作设置为编译,而是将其设置为YourCustomAction。下面是一个示例目标文件,显示如何将 Antlr4 的构建操作的输入转换为C#文件,然后将这些C#文件编译为项目的一部分。如果您没有使用ReSharper,则此项目中的模式甚至可以在Visual Studio中为您提供无缝的IntelliSense支持(您不需要构建项目,以便IntelliSense找到并处理生成的文件)。

https://github.com/tunnelvisionlabs/antlr4cs/blob/master/runtime/CSharp/Antlr4BuildTasks/Antlr4.v4.0.targets

答案 1 :(得分:0)

我将任务从BeforeBuild移到了AfterBuild。我创建了一个csproj的副本,我随意操作它并重建它。它是最有效的解决方案,但它没有并发症。

答案 2 :(得分:0)

我已经迟到了,但想要回应你原来的概念。

您不需要修改.csproj。在你的.csproj中,你会在@(编译)ItemGroup中看到许多与.cs文件相对应的项目。

<Compile Include="myfile.cs" />

现在你有custom task使用它作为模板来生成myfile_gen.cs,而你想要编译它。

创建target after your custom cs_gen targe,它将移动到@(编译)集合,并用* _gen.cs模拟替换成员。

<Compile Include="myfile_gen.cs" Exclude="myfile.cs" />

这将在编译时动态修改输入,你不会成为spinning up behind the scenes MsBuild work like is done behind the scenes with WPF and Silverlight projects