配置.NET 6与.NET Framework 4.8混合项目Azure DevOps构建管道遇错求助
问题场景
我在给一个ASP.NET遗留解决方案配置Azure DevOps构建管道,这个方案包含WCF、WPF项目,还有一堆基于.NET Framework 4.8和.NET Standard 2.0的服务层、仓储层类库,近期新增了复用现有服务的.NET Core 6 WebAPI。
配置WebService项目的构建管道时,部分项目构建失败,抛出错误:
Your project file doesn't list 'win' as a "RuntimeIdentifier". You should add 'win' to the "RuntimeIdentifiers" property in your project file and then re-run NuGet restore
但明确的是——.NET Framework项目根本不需要配置RuntimeIdentifier,这报错完全不符合预期。
解决方案
最后通过修改NuGet Restore任务的目标路径,从指定单个WebProject.csproj改为指向整个解决方案文件(**/sln),重新执行构建后成功通过。
原因推测
当仅针对单个.NET Core项目执行NuGet Restore时,NuGet可能会对整个依赖链强制进行RuntimeIdentifier校验,而在混合.NET Framework与.NET Core的项目场景下,这种校验会波及到不需要RuntimeIdentifier的.NET Framework项目,从而触发错误。改为针对整个解决方案执行Restore后,NuGet会自动识别每个项目的框架类型,适配对应的恢复逻辑,自然跳过了对.NET Framework项目不必要的RuntimeIdentifier检查。
内容的提问来源于stack exchange,提问作者MiroslavDinev

