6

重现:

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

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

在 MyApp.Droid 项目中引用 TestMe。

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

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

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

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

或者

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

没有成功。

有解决此问题的方法吗?

4

2 回答 2

5

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

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

于 2018-05-30T19:27:18.713 回答
4

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

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

阅读 README.md 建议从 VS15.6+ 开始,您可以将 <Project Sdk="Microsoft.NET.Sdk"> 与 <Project Sdk="MSBuild.Sdk.Extras/1.2.2"> 交换

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

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

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

更新:而不是写

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

也可以写

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" />
于 2018-05-30T21:27:20.047 回答