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

多平台MAUI项目引用.NET7.0类库时找不到平台特定DLL

问题描述

我有一个包含多个项目的多平台MAUI解决方案,其中一个项目引用需要根据平台切换,因此我将其从.sln文件(GUI默认添加位置)移至项目文件中作为条件元素:

<ItemGroup>
  <ProjectReference
      Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) != 'android'"
      Include="..\NonAndroidLibrary\NonAndroidLibrary.csproj"
    >
    <Project>{8cd7a9a7-9740-4f03-83bc-4ae8f09cdcb9}</Project>
    <Name>NonAndroidLibrary</Name>
  </ProjectReference>
...
</ItemGroup>

该类库项目仅面向.NET7.0,但我遇到了找不到平台特定二进制文件的错误:

Error   WMC1006 Cannot resolve Assembly or Windows Metadata file 'M:\repos\MainSolution\NonAndroidLibrary\bin\Debug\net7.0-windows10.0.19041.0\NonAndroidLibrary.dll'   MainProject M:\repos\MainSolution\MainProject\MainProject.csproj    1   
Error   CS0006  Metadata file 'M:\repos\MainSolution\NonAndroidLibrary\bin\Debug\net7.0-windows10.0.19041.0\NonAndroidLibrary.dll' could not be found   MainProject (net7.0-android)    M:\repos\MainSolution\MainProject\CSC   1   Active

第二个错误(CS0006)在其他平台上重复出现,而WMC1006目前仅在Windows平台显示。另一个仍在.sln中引用的.NET7.0项目未出现此问题,其debug\.net7.0\下的单个输出DLL可被正确引用。请问如何在.csproj中为多目标应用引入与平台无关的DLL?

解决方案

问题根源是MAUI多目标项目默认会为每个目标平台,尝试匹配对应框架的引用输出,但你的类库只编译了通用的net7.0版本,没有平台特定的目标文件,所以才会报错找不到对应路径下的DLL。

解决方法很简单,在ProjectReference里明确指定要引用的目标框架,让MAUI项目直接使用类库的通用输出:

<ItemGroup>
  <ProjectReference
      Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) != 'android'"
      Include="..\NonAndroidLibrary\NonAndroidLibrary.csproj"
      SetTargetFramework="TargetFramework=net7.0"
      PrivateAssets="all"
    >
    <Project>{8cd7a9a7-9740-4f03-83bc-4ae8f09cdcb9}</Project>
    <Name>NonAndroidLibrary</Name>
  </ProjectReference>
</ItemGroup>
  • SetTargetFramework:强制MAUI项目引用类库的net7.0目标,而不是尝试找平台特定的版本
  • PrivateAssets="all":可选配置,避免该类库的依赖被传递到MAUI项目中,按需添加即可

如果上面的方法不生效,也可以尝试直接引用编译好的DLL文件,但这种方式无法自动触发类库的编译,不如ProjectReference灵活:

<ItemGroup>
  <Reference
      Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) != 'android'"
      Include="NonAndroidLibrary"
      HintPath="..\NonAndroidLibrary\bin\$(Configuration)\net7.0\NonAndroidLibrary.dll"
  />
</ItemGroup>

内容的提问来源于stack exchange,提问作者Bob Sammers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:50:25