Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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# 如何在c中快速处理csproj文件_C#_Visual Studio_Msbuild - Fatal编程技术网

C# 如何在c中快速处理csproj文件

C# 如何在c中快速处理csproj文件,c#,visual-studio,msbuild,C#,Visual Studio,Msbuild,我正在制作一个预编译器,这意味着它将读取大量文件并处理一些定制的预处理器指令。但是,无论我在网上浏览了多少次,我都找不到一个能为.csproj文件工作的处理器。我可以读取它们并提取数据。但我不能用配置和平台参数处理它们来提取状态 我的意思是,如果我有一个csproj,它在调试版本中添加了一些预处理器指令,在发布版本中添加了其他指令,那么我希望能够处理该文件,以便在生成调试时正确地获得所有随后定义的预处理器,同样,在发布版本中也是如此 具体来说,我将处理dotnet核心项目 我想在使用 平台和配置

我正在制作一个预编译器,这意味着它将读取大量文件并处理一些定制的预处理器指令。但是,无论我在网上浏览了多少次,我都找不到一个能为.csproj文件工作的处理器。我可以读取它们并提取数据。但我不能用配置和平台参数处理它们来提取状态

我的意思是,如果我有一个csproj,它在调试版本中添加了一些预处理器指令,在发布版本中添加了其他指令,那么我希望能够处理该文件,以便在生成调试时正确地获得所有随后定义的预处理器,同样,在发布版本中也是如此

具体来说,我将处理dotnet核心项目

我想在使用 平台和配置。这包括OutputPath之类的东西, AllowUnsafe、BuildTargets等

<> > C编译器不同于C++编译器,没有特定的预编译指令项元素,它是编译器类似的PROCEPROSTORACE定义。p> 作为建议,您可以尝试在xxxx.csproj文件中添加一个自定义文件以执行一些预处理。如果要在预构建目标之后执行所有这些操作,只需将AfterTargets=PrepareForBuild设置为这个自定义目标,这意味着它在PrepareForBuild目标之后运行

建议

就这样,

<Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild">

<Message Importance="high" Text="$(OutputPath)--$(AllowUnsafeBlocks)--$(PrepareForBuildDependsOn)" ></Message>

 ........//other msbuild task

 </Target>
同时,如果您还希望将palform添加为并行条件,请尝试以下操作:

 <Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild" Condition=" '$(Configuration)' == 'Debug' and '$(Platform)' =='Any CPU' ">
2由于outputpath和AllowUnsafe是MSBuild属性,因此可以使用$outputpath和$AllowUnsafeBlocks获取它们的值,同时可以使用@。。。获取的值


3基本上,要在target中执行预指令,您可以使用任务执行预指令,您可以参考添加任何任务以执行任何操作。

那么您想在预编译阶段识别编译器指令和编译配置吗?@TroyPalacino,基本上是,我想在使用平台和配置处理所有条件后获取文件状态。这包括OutputPath、AllowUnsafe、BuildTargets等。如果我误解了你的问题,请随时告诉我们。恐怕你不太明白我想做什么,我正在创建一个预处理器来接收c文件并处理自定义预处理器指令,我想做的是添加对MSBuild配置的支持,这意味着它将读取.csproj文件,并在解析配置和平台时提取生成的状态。如果我可以执行一个程序并通过使用目标解析所有MSBuild指令,那么这将有所帮助。我可以在目标中这样做吗?如果您想在c编译器csc.exe下创建一个自定义预处理器,或者只创建一个新的编译器,我认为您可以通过编码来扩展MSBuild。您可以通过nuget创建一个新的控制台projectctcode、继承和,然后创建一个自定义build.exe引擎来生成您的项目。此外,由于MSBuild的代码是开源的。您可以引用它,然后根据需要进行修改。谢谢,我已经解决了这个问题,而且我的计划是在使用VS时围绕构建引擎,这样,如果MSBuild得到更新,我的代码仍然可以使用对构建器/编译器所做的任何更改。
 <Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild" Condition=" '$(Configuration)' == 'Debug' and '$(Platform)' =='Any CPU' ">