繁体   English   中英

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

[英]How do i Quickly Process a csproj file in c#

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

我的意思是,如果我有一个 csproj,如果在 DEBUG 构建中添加一些预处理器指令,而在 RELEASE 构建中添加其他指令,我希望能够处理该文件,以便在构建 DEBUG 时我正确地得到所有然后定义预处理器,同样用于 RELEASE 构建。

我将具体处理 dotnet 核心项目。

我想在使用平台和配置处理所有条件后获取文件状态。 这包括像 OutputPath、AllowUnsafe、BuildTargets 之类的东西。

与 c++ 编译器不同,c# 编译器没有像PreprocessorDefinitions这样的编译器指定的特定预编译指令项元素。

作为建议,您可以尝试在xxxx.csproj文件中添加一个自定义目标来执行一些 msbuild 任务来进行一些预处理。 并且您想在pre-build目标之后执行所有这些操作,您可以将AfterTargets="PrepareForBuild"设置为此自定义目标,这意味着它在PrepareForBuild目标之后运行。

建议

像这样:

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

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

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

 </Target>

1)如果想以配置为条件,根据DebugRelease执行不同的前置指令,可以使用MSBuild conditions 如果你想使用Debug ,你可以参考这个:

<Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild" Condition=" '$(Configuration)' == 'Debug' ">

同时,如果您还想添加palform作为并行条件,请尝试以下操作:

 <Target Name="CustomPreprocessor" AfterTargets="PrepareForBuild" Condition=" '$(Configuration)' == 'Debug' and '$(Platform)' =='Any CPU' ">

2)由于outputpathAllowUnsafe是 MSBuild 属性,您可以使用$(outputpath)$(AllowUnsafeBlocks)获取它们的值,而您可以使用@(...)获取MSBuild items 的值。

3)基本上,要在target中执行一个预指令,你可以用一个任务来完成,你可以参考这个文档添加任何任务,你想做什么操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM