C# 是否可以从自定义任务以编程方式更改生成项目?

C# 是否可以从自定义任务以编程方式更改生成项目?,c#,msbuild,visual-studio-2013,C#,Msbuild,Visual Studio 2013,我有一个自定义任务程序集,它在构建之前运行 对于原始项目的一些cs文件,我生成了一些gen.cs文件 <Compile Include="myfile.cs" /> 我想构建gen.cs文件,而不是原始的cs文件 这是否可以通过执行任务来实现 谷歌搜索,但没有提示…将原始.cs文件的构建操作设置为编译,将其设置为类似YourCustomAction。下面是一个示例目标文件,显示了如何将生成操作为Antlr4的输入转换为C#文件,然后将这些C#文件编译为项目的一部分。如果您不使用Re

我有一个自定义任务程序集,它在构建之前运行

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

<Compile Include="myfile.cs" />
我想构建gen.cs文件,而不是原始的cs文件

这是否可以通过执行任务来实现


谷歌搜索,但没有提示…

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


我将任务从构建前移至构建后。我创建了csproj的一个副本,我可以随意操作它并重建它。这不是最有效的解决方案,但它没有复杂的问题。

我来晚了,但我想回应你最初的想法

您不需要修改.csproj。在.csproj中,您将在@(Compile)中看到与.cs文件相对应的许多项

<Compile Include="myfile.cs" />

现在,您有了一个将其作为模板来生成myfile_gen.cs的程序,您需要编译它

创建一个发生t的集合,该集合将在@(编译)集合上移动,并用*\u gen.cs模拟值替换成员

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


这将在编译前动态修改输入,而您将不会这样做。

谢谢。这是解决方案的一半。实际上,我希望cs文件的原始构建操作保持不变…谢谢。似乎正是我需要的。但我是MsBuild的新手,您能添加一些链接来进一步指导我吗?