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

为何同解决方案中.NET7的Domain项目编译正常,Client项目引用Morris.Moxy报CS0012错误?

问题原因与解决方案

核心原因

这个编译错误的本质是:作为Roslyn代码生成器的Morris.Moxy,在编译Client项目的过程中,其运行时无法找到.NET Standard 2.0程序集的依赖。

虽然Morris.Moxy本身目标框架是.NET Standard 2.0,但Roslyn生成器是在宿主编译进程(这里是.NET 7的编译环境)中运行的。Domain项目能正常编译,是因为它自身或依赖的其他库间接引入了netstandard程序集,让编译进程自动加载了该程序集;而Client项目没有这类间接依赖,导致生成器运行时找不到ValueType所在的netstandard程序集,触发CS0012错误。

解决办法

1. 给Client项目手动添加netstandard程序集引用

在Client项目的.csproj文件中添加以下配置,直接引入netstandard程序集:

<ItemGroup>
  <Reference Include="netstandard">
    <HintPath>$(NETStandardLibraryPath)\netstandard.dll</HintPath>
  </Reference>
</ItemGroup>

或者通过NuGet包间接引入(更简洁):

<ItemGroup>
  <PackageReference Include="NETStandard.Library" Version="2.0.3" PrivateAssets="all" />
</ItemGroup>

PrivateAssets="all"的作用是避免把这个依赖传递到Client项目的输出程序集中,因为Client本身是.NET 7项目,不需要直接依赖netstandard包。

2. 检查Client项目的框架引用配置

  • 确认Client项目的.csproj中目标框架配置正确:<TargetFramework>net7.0</TargetFramework>,没有混合旧框架的设置。
  • 如果项目中存在<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>这类禁用隐式框架引用的配置,需要移除该配置,或者手动添加必要的框架引用。

3. 升级生成器的目标框架(可选)

如果不需要兼容旧版本项目,可以把Morris.Moxy的目标框架升级到.NET Standard 2.1或直接.NET 7,这样能减少跨框架依赖的解析问题,从根源避免这类错误。


内容的提问来源于stack exchange,提问作者Peter Morris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:24