包含 c# 和 f# 项目的根文件夹中的 Directory.Build.props 导致问题

And*_*dez 3 c# msbuild f#

在创建新的 Visual Studio 解决方案时,我想使用Directory.Build.props来控制所有 c# 项目的 c# 版本号,而无需单独设置它们。

但是,混合使用 c# 和 f# 文件夹会导致编译错误。

Severity    Code    Description Project File    Line    Suppression State
Error   FS0246  Unrecognized value '8.0' for --langversion use --langversion:? for complete list    FSharpLib   C:\source\solution\FSharpLib\FSC    1   Active
Run Code Online (Sandbox Code Playgroud)

这是演示该问题的最小解决方案。在一个真正的解决方案中,显然有更多的项目。

文件夹结构

\solution
\solution\Directory.Build.props
\solution\CSharpLib
\solution\FSharpLib

目录.Build.props

<Project>
 <PropertyGroup>
   <LangVersion>8.0</LangVersion>
 </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

项目文件(为了完整性)

CSharpLib
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

</Project>

Run Code Online (Sandbox Code Playgroud) FSharpLib
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="Library.fs" />
  </ItemGroup>

</Project>

Run Code Online (Sandbox Code Playgroud)

是否有可能有c sharp和f sharp项目并排用Directory.Build.props在根文件夹只适用于c sharp项目?

将构建道具移动到下面只有 csharp 项目的文件夹中是可行的,但我不想以这种方式构建事物 - 我希望相关模块彼此并排。

Car*_*Dev 6

您可以添加Condition="'$(ProjectExt)'=='.csproj'"到您的Directory.build.props PropertyGroup以仅将其应用于 C# 项目。

  • 这在我的测试中实际上不起作用。请参阅[此答案](/sf/answers/3817661711/)了解正确的语法。 (2认同)