如何通过命令行配置C#项目的Compile Include编译项
命令行控制编译项的实现方案
无需每次手动编辑CSPROJ文件,可通过MSBuild原生的参数传递能力实现需求,具体方案如下:
方案一:一次调整CSPROJ配置,后续全命令行切换(推荐,稳定性最高)
你只需要对现有CSPROJ做一次极小的修改,将硬编码的编译文件路径替换为可通过命令行赋值的MSBuild属性即可:
- 首先在
PropertyGroup节点中添加自定义属性,设置默认编译的入口文件:<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <RootNamespace>namespace_test</RootNamespace> <Nullable>enable</Nullable> <EnableDefaultCompileItems>false</EnableDefaultCompileItems> <!-- 新增:默认编译A.cs,命令行未传参时生效 --> <EntryFile Condition="'$(EntryFile)' == ''">A.cs</EntryFile> </PropertyGroup> - 然后修改
ItemGroup节点内的编译项配置,替换硬编码的文件名为自定义属性:<ItemGroup> <Compile Include="$(EntryFile)" /> </ItemGroup>
配置完成后,后续切换编译文件完全不需要改动CSPROJ,直接执行对应命令即可:
- 编译运行A.cs(默认):
dotnet run - 切换编译运行B.cs:
dotnet run /p:EntryFile=B.cs
如果遇到增量构建缓存导致输出未更新的情况,可以加上--no-incremental参数强制全量重建:
dotnet run /p:EntryFile=B.cs --no-incremental
方案二:不修改CSPROJ临时切换编译项
如果你不想改动现有CSPROJ文件,也可以直接通过命令行参数覆盖CSPROJ内定义的编译项集合,直接执行以下命令即可编译运行B.cs:
dotnet run /p:Compile="B.cs"
注意:该方式会完全覆盖CSPROJ中定义的所有Compile项,如果你的项目后续新增了其他需要参与编译的附属源文件,使用该命令时必须把所有要编译的文件都列在参数中,否则会被MSBuild忽略,仅适合临时快速验证场景使用。
内容的提问来源于stack exchange,提问作者user32882
相关产品推荐
相关产品推荐

