升级VS 16.11.5后使用Microsoft.Build构建项目报错如何解决
ERROR C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(4693,7): The "WroteAtLeastOneFile" parameter is not supported by the "Copy" task. Verify the parameter exists on the task, and it is a gettable public instance property.
根因说明
VS 16.11.5版本更新后,自带的MSBuild对内置Copy任务新增了WroteAtLeastOneFile输出参数,配套的目标文件默认会传递该参数。你代码中引用的Microsoft.Build系列NuGet包版本低于当前系统安装的MSBuild版本,旧版本的Copy任务实现类没有对应属性,因此触发参数不支持报错。VS手动构建时调用的是自带的最新版本MSBuild组件,因此不会出现该问题。
解决方案
- 方案一(推荐,永久解决):
- 升级项目中所有
Microsoft.Build.*前缀的NuGet包,版本选择和VS 16.11.5匹配的16.11.x最新稳定版即可,不要使用17.x及以上版本(对应VS2022,会出现兼容性问题) - 若代码中显式指定了MSBuild加载路径,将路径更新为当前VS对应的MSBuild目录:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin - 构建时显式指定ToolsVersion参数为
Current或16.11,避免自动加载旧版本工具集
- 升级项目中所有
- 方案二(临时兼容,无需修改当前项目依赖):
在需要被构建的目标项目的.csproj文件中,加入如下配置即可禁用该参数传递:<PropertyGroup> <CopyTaskSupportsWroteAtLeastOneFile>false</CopyTaskSupportsWroteAtLeastOneFile> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Iwerth
相关产品推荐
相关产品推荐

