升级System.Diagnostics.DiagnosticSource 9.0.2后Azure DevOps构建路径错误
解决System.Diagnostics.DiagnosticSource 9.0.2在.NET Framework 4.7.2 Azure DevOps构建中的MSB3021错误
以下是针对该问题的可行解决方案:
回退到验证过的兼容版本
直接将System.Diagnostics.DiagnosticSource版本回退至6.0.2,该版本在你的.NET Framework 4.7.2环境及Azure DevOps流水线中已验证可用,可快速规避新版本的兼容性问题。修改项目的packages.config或.csproj文件中的版本号后,重新执行NuGet还原操作。手动排除ILLink文件的复制操作
ILLink.Descriptors.LibraryBuild.xml是针对.NET Core/.NET 5+的裁剪工具设计的,.NET Framework 4.7.2无需此文件。可在项目的.csproj中添加配置跳过该文件的复制:<ItemGroup> <Content Remove="packages\System.Diagnostics.DiagnosticSource.9.0.2\build\netstandard2.0\ILLink.Descriptors.LibraryBuild.xml" /> <None Include="packages\System.Diagnostics.DiagnosticSource.9.0.2\build\netstandard2.0\ILLink.Descriptors.LibraryBuild.xml"> <CopyToOutputDirectory>Never</CopyToOutputDirectory> </None> </ItemGroup>也可通过目标任务通用删除该文件:
<Target Name="RemoveILLinkFiles" BeforeTargets="CopyAllFilesToSingleFolderForPackage;CopyFilesToOutputDirectory"> <ItemGroup> <ILLinkFilesToRemove Include="$(OutputPath)\ILLink.Descriptors.LibraryBuild.xml" /> </ItemGroup> <Delete Files="@(ILLinkFilesToRemove)" /> </Target>更新自托管代理的NuGet环境
自托管代理的NuGet版本可能对新版本包的路径处理逻辑存在缺陷。尝试升级代理上的NuGet至最新稳定版,同时清理代理本地的NuGet缓存(删除%userprofile%\.nuget\packages下的System.Diagnostics.DiagnosticSource相关目录),之后重新执行构建流水线。强制指定包的框架兼容性
在项目的.csproj文件中明确指定该包针对.NET Framework 4.7.2的兼容设置,并抑制框架不匹配警告:<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="9.0.2"> <TargetFrameworks>net472</TargetFrameworks> <NoWarn>NU1701</NoWarn> </PackageReference>
内容的提问来源于stack exchange,提问作者Rasmus4J
相关产品推荐
相关产品推荐

