多模块项目中如何为所有子项目全局默认启用RestorePackagesWithLockFile
完全不需要在每个.csproj文件中重复添加配置,借助MSBuild原生的目录层级属性继承能力,就能实现指定目录下所有项目默认开启锁文件功能,一劳永逸解决漏配、重复配置的问题。
具体实现方案
在解决方案.sln文件所在的仓库根目录,新建名为Directory.Build.props的文件,写入如下配置:
<Project> <PropertyGroup> <!-- 全局开启NuGet锁文件自动生成 --> <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile> <!-- 可选配套配置:CI环境下自动开启锁定模式,还原时严格匹配锁文件版本,禁止自动更新依赖 --> <RestoreLockedMode Condition="'$(CI)' == 'true'">true</RestoreLockedMode> </PropertyGroup> </Project>
MSBuild执行还原、编译流程时,会自动从每个项目的所在目录向上逐层遍历查找Directory.Build.props文件,找到后会自动将其中的配置注入到所有子目录的项目中。配置完成后:
- 仓库内所有现有的源码、测试项目会自动开启锁文件功能
- 后续新增的任何嵌套子项目,不需要手动加任何配置,会默认继承该设置
- 配置随仓库代码一起提交,所有开发者、CI流水线拉取代码后自动生效,不需要单独修改本机环境
特殊场景处理
如果仓库内有个别项目不需要启用锁文件,只需要在对应项目的.csproj文件中单独添加如下配置即可,项目级配置优先级高于目录级全局配置,会自动覆盖全局设置:
<PropertyGroup> <RestorePackagesWithLockFile>false</RestorePackagesWithLockFile> </PropertyGroup>
除了NuGet锁文件配置之外,所有需要跨项目统一的MSBuild属性,比如C#语言版本、可空引用上下文开关、编译警告等级、统一版本号规则等,都可以放在这个目录级配置文件中管理,彻底消除多项目重复配置的问题。
内容的提问来源于stack exchange,提问作者lanoxx
相关产品推荐
相关产品推荐

