我有一个多平台 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 上显示。
另一个
.net7.0
项目(仍在 .sln 中引用)不会导致此问题,并且 debug\.net7.0\
中的单个输出 dll 已正确引入。
我需要做什么才能将平台无关的 dll 引入到
.csproj
中的多目标应用程序?
有一个元素可以放置在
<ProjectReference>
标签内,告诉构建引擎期望什么样的项目:
<SetTargetFramework>TargetFramework=net7.0</SetTargetFramework>
将其放在上面的代码片段中可以解决问题。
VS2022 中的 Intellisense 似乎没有建议使用此元素,但在几个地方引用了它,例如:https://github.com/dotnet/maui/issues/3243