MSBuild如何检测项目语言(C#/F#)以配置LangVersion?
解决C#与F#项目共享.props文件时的LangVersion全局配置问题
要在共享.props文件中仅给C#项目设置LangVersion,你需要修正条件判断的属性值,同时还有两种可靠的检测方式可选:
方式一:使用Language属性(推荐)
C#项目的Language属性值实际是C#(而非你尝试的CSharp),F#项目则为F#。修改后的配置如下:
<!-- 仅为C#项目设置语言版本 --> <PropertyGroup Condition="'$(Language)' == 'C#'"> <LangVersion>10.0</LangVersion> </PropertyGroup>
如果不确定当前项目的Language属性值,可以在项目文件中临时添加以下代码,编译时会在输出窗口打印该值:
<Target Name="PrintLanguage" BeforeTargets="Build"> <Message Text="当前项目语言:$(Language)" Importance="high" /> </Target>
方式二:通过项目扩展名判断
如果担心Language属性在某些场景下未被正确设置,也可以直接通过项目文件扩展名来区分:
<!-- 仅为.csproj项目设置语言版本 --> <PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'"> <LangVersion>10.0</LangVersion> </PropertyGroup>
两种方式都能确保F#项目不会继承C#的LangVersion配置,同时保留版本/包元数据的集中管理,避免重复配置问题。
内容的提问来源于stack exchange,提问作者Aaronontheweb
相关产品推荐
相关产品推荐

