C# 使用MSBuild生成C
我有一个生成cs文件的批处理文件。新的cs文件存储在我的一个项目解决方案中 以下是我的msbuild任务的一个片段:C# 使用MSBuild生成C,c#,.net,msbuild,code-generation,msbuild-task,C#,.net,Msbuild,Code Generation,Msbuild Task,我有一个生成cs文件的批处理文件。新的cs文件存储在我的一个项目解决方案中 以下是我的msbuild任务的一个片段: <Target Name="MyDummyGenerator" BeforeTargets="Build"> <Message Text="Generating file" /> <Exec Command="./path_to_batch_file/dummy.bat" ContinueOnError="false" /> &
<Target Name="MyDummyGenerator" BeforeTargets="Build">
<Message Text="Generating file" />
<Exec Command="./path_to_batch_file/dummy.bat" ContinueOnError="false" />
</Target>
问题是我生成的文件没有列在要编译的文件中,并且不是程序集的一部分。尝试使用将此文件隐式添加到csproj文件后,我收到以下错误MyGeneratedFile.cs是从批处理文件写入的文件:
包含重复的“内容”项。默认情况下,.NET SDK包含项目目录中的“内容”项
顺便说一句-再次编译时,生成文件是程序集的一部分,但这是因为在开始整个构建步骤之前,该文件位于项目源中
我甚至尝试在预构建事件中运行它,但没有成功
使用msbuild生成c代码的正确方法是什么?
我正在使用.net Framework 4.7.1
我想这篇文章回答了这个问题:
简而言之,在编译或intellisense开始之前,您需要钩住CoreComile目标以生成文件,并在目标内部生成编译项。 有关如何在生成期间创建项目的详细信息,请参阅此文档: 此外,您还应该将文件生成到中间输出obj文件夹,而不是在源文件中,以避免混乱。 在下面的示例中,这里的输入和输出主要是为了让MSBUILD知道在文件更改时刷新什么 ->您使用的是哪个.NET framework?4.7.1我将更新主postAnd,您可以添加批处理文件内容吗?它只编写一个cs文件内容。例如@echo off@@echo//这是C文件的内容,例如>MyFile.cs对我来说是$IntermediateOutputPath,而不是$IntermediateOutputDir。