.NET Core项目中如何在csproj文件中条件性排除/包含文件?
在csproj中条件性包含/排除文件的正确姿势
当然可以在csproj文件里条件性地包含或排除文件啦!你之前的代码没生效,大概率是犯了个小拼写错误——你写的<Compiled>应该是<Compile>,这可是MSBuild里指定编译文件的标准元素哦。咱们来调整一下,同时给你几种更实用的写法:
一、修正你原本的排除逻辑
如果你的需求是:当目标框架不是netstandard2.0和netcoreapp2.0时,移除IDbProviderFactories.cs,正确的代码应该是:
<ItemGroup> <Compile Remove="IDbProviderFactories.cs" Condition="'$(TargetFramework)' != 'netstandard2.0' AND '$(TargetFramework)' != 'netcoreapp2.0'" /> </ItemGroup>
二、只在特定框架下包含文件
反过来,如果某个文件只需要在特定框架(比如.NET Framework 4.6.2和.NET Core 3.1)中编译,可以直接给ItemGroup加条件:
<ItemGroup Condition="'$(TargetFramework)' == 'net462' OR '$(TargetFramework)' == 'netcoreapp3.1'"> <Compile Include="OnlyForSpecificFrameworks.cs" /> </ItemGroup>
三、复杂条件用Choose/When结构
如果你的条件逻辑比较复杂,用<Choose>+<When>+<Otherwise>的组合会更清晰,可读性更强:
<Choose> <!-- 当目标框架是netstandard2.0或netcoreapp2.0时,包含文件 --> <When Condition="'$(TargetFramework)' == 'netstandard2.0' OR '$(TargetFramework)' == 'netcoreapp2.0'"> <ItemGroup> <Compile Include="IDbProviderFactories.cs" /> </ItemGroup> </When> <!-- 其他所有框架下,移除文件 --> <Otherwise> <ItemGroup> <Compile Remove="IDbProviderFactories.cs" /> </ItemGroup> </Otherwise> </Choose>
最后提醒一下:修改完csproj文件后,记得在Visual Studio里重新加载项目,有时候IDE需要刷新才能识别这些配置变更哦。
内容的提问来源于stack exchange,提问作者Eben Roux
相关产品推荐
相关产品推荐

