Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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
C# 使用MSBuild生成C_C#_.net_Msbuild_Code Generation_Msbuild Task - Fatal编程技术网

C# 使用MSBuild生成C

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" /> &

我有一个生成cs文件的批处理文件。新的cs文件存储在我的一个项目解决方案中

以下是我的msbuild任务的一个片段:

<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。