在 platform.uno 项目中引用 .netstandard2_0 项目

Referencing a .netstandard2_0 project in a platform.uno project

重现:

下载https://github.com/nventive/Uno.QuickStart

添加一个名为 TestMe 的 .NETStandard2_0 项目。

参考 MyApp.Droid 项目中的 TestMe。

构建MyApp.Droid带来编译错误:

System.InvalidOperationException: 项目 TestMe 没有提供任何元数据参考。这可能是由于路径无效,例如在 csproj 中使用了 $(SolutionDir);尝试使用相对路径 instead.This 也可能与缺少默认配置指令有关。有关详细信息,请参阅 Uno.SourceGenerator Readme.md 文件。 在 Uno.SourceGeneration.Host.SourceGeneratorHost.d__4.MoveNext() 中 C:\projects\uno-sourcegeneration\src\Uno.SourceGenerationHost.Shared\SourceGeneratorHost.cs:303 行 MyApp.Droid

我已经尝试将 TestMe.csproj 更改为

<TargetFrameworks>net461;netstandard2.0</TargetFrameworks>

<TargetFrameworks>net47;netstandard2.0</TargetFrameworks>

没有成功。

这个问题有解决方法吗?

不幸的是,这是一个已知的 Roslyn 问题:https://github.com/nventive/Uno.SourceGeneration/issues/2

要解决此问题,您必须在 TargetFrameworks 节点中包含您想要支持的所有平台,在您的情况下是 MonoAndroid80(或类似平台)。

感谢 Jerome,我找到了 xamarin 目标框架名称 https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-manual

问题是默认 <项目SDK="Microsoft.NET.Sdk"> .NETStandard 项目不允许 xamarin 目标框架。 解决方案是使用 https://github.com/onovotny/MSBuildSdkExtras

阅读 README.md 建议从 VS15.6+ 开始,您可以将

交换

更新后的 TestMe.csproj 必须如下所示

<Project Sdk="MSBuild.Sdk.Extras/1.2.2">
 <PropertyGroup>
   <TargetFrameworks>netstandard2.0;MonoAndroid81;xamarinios10</TargetFrameworks>
 </PropertyGroup>

注意:.netstandard 项目的 monodroid 名字必须与 Android 项目版本完全匹配。 --> Oreo8.1 的 MonoAndroid81

更新:而不是写

<Project Sdk="MSBuild.Sdk.Extras/1.2.2">

也能写

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" />