迁移新电脑后遇MSB4094错误:多项目无法传入ITaskItem参数
问题情况
迁移到新电脑后编译项目,触发MSB4094错误,涉及的任务代码如下:
<Microsoft.SourceLink.GitHub.GetSourceLinkUrl RepositoryUrl="$(PrivateRepositoryUrl)" SourceRoot="@(SourceRoot)" Hosts="@(SourceLinkGitHubHost)" IsSingleProvider="$(SourceLinkHasSingleProvider)"> <Output TaskParameter="SourceLinkUrl" PropertyName="_SourceLinkUrlToUpdate"/> </Microsoft.SourceLink.GitHub.GetSourceLinkUrl>
错误详情
严重性 代码 描述 项目 文件 行 抑制状态
错误 MSB4094 "C:\Users\Rob.nuget\packages;C:\Users\rob.nuget\packages" 是 "Microsoft.SourceLink.GitHub.GetSourceLinkUrl" 任务的 "SourceRoot" 参数的无效值。无法将多个项传递给类型为 "Microsoft.Build.Framework.ITaskItem" 的参数。 Appi.Application C:\Program Files\dotnet\sdk\8.0.101\Sdks\Microsoft.SourceLink.GitHub\build\Microsoft.SourceLink.GitHub.targets 36
修复方法
清理重复的NuGet源路径
打开C:\Users\Rob\AppData\Roaming\NuGet\NuGet.Config,检查packageSources节点,删除重复的、仅大小写不同的C:\Users\Rob\.nuget\packages\和C:\Users\rob\.nuget\packages\,只保留一条记录。清除编译缓存
删除项目根目录下的bin和obj文件夹,然后在命令行执行:dotnet nuget locals all --clear完成后重新编译项目。
调整SourceRoot参数传递(备选)
如果前两步无效,可在项目的.csproj中添加覆盖逻辑,确保SourceRoot只传递单个项:<Target Name="FixSourceLinkSourceRoot" BeforeTargets="GetSourceLinkUrl"> <ItemGroup> <SourceRoot Remove="@(SourceRoot)" /> <SourceRoot Include="@(SourceRoot->First())" /> </ItemGroup> </Target>
内容的提问来源于stack exchange,提问作者Arie

