You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PostSharp编译.NET Standard 2.0项目出现MSB4064错误如何解决

报错原因

这个报错是PostSharp低版本与.NET SDK 5.0.300及以上版本的兼容性问题:.NET SDK 5.0.300修改了PrepareForReadyToRunCompilation任务的参数定义,而对应版本的PostSharp生成的CrossGen临时项目仍在使用已移除的NETCoreSdkRuntimeIdentifier参数,导致MSB4064错误。

错误 MSB4064:从路径C:\Program Files\dotnet\sdk\5.0.300\Sdks\Microsoft.NET.Sdk\tools\net5.0\Microsoft.NET.Build.Tasks.dll加载的程序集Microsoft.NET.Build.Tasks, Version=5.0.4.26711, Culture=neutral, PublicKeyToken=31bf3856ad364e35中的"PrepareForReadyToRunCompilation"任务不支持"NETCoreSdkRuntimeIdentifier"参数。请验证该参数是否存在于该任务中,是否指向正确的程序集,且该参数是可设置的公共实例属性。项目标识:PROJECT.ASSEMBLY.NAME,文件路径:C:\ProgramData\PostSharp\CrossGenPaths\sdk5.0.300-netcoreapp5.0-r5.0.6-win-x64\CrossGen.proj

解决方案
  • 方案1:升级PostSharp版本
    将项目引用的PostSharp升级到6.8.12或更高的稳定版本,该版本已经修复了和.NET SDK 5.0.300+的兼容性问题,是最优解决方案。
  • 方案2:禁用PostSharp的CrossGen功能
    如果当前项目暂时无法升级PostSharp版本,可在所有报错项目的.csproj文件的<PropertyGroup>节点中添加如下配置:
<PostSharpDisableCrossGen>True</PostSharpDisableCrossGen>

该配置会关闭PostSharp的ReadyToRun预编译逻辑,完全避开参数不匹配的报错,且不会影响PostSharp的核心AOP织入功能。

  • 方案3:降级.NET SDK版本
    如果以上两种方案都不适用,可卸载本地安装的5.0.300版本.NET SDK,安装5.0.203或更早的5.0.x版本SDK,同时在解决方案根目录新增global.json文件锁定SDK版本:
{
  "sdk": {
    "version": "5.0.203",
    "rollForward": "disable"
  }
}

内容的提问来源于stack exchange,提问作者Shoshana Tzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 15:15:09