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

时间:2018-05-30 15:09:42

标签: c# uwp uno-platform

重现:

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

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

MyApp.Droid项目中的参考TestMe。

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

System.InvalidOperationException:项目TestMe未提供任何元数据引用。这可能是由于路径无效,例如在csproj中使用$(SolutionDir);尝试使用相对路径。这也可能与缺少的默认配置指令有关。有关更多详细信息,请参阅Uno.SourceGenerator Readme.md文件。    at Uno.SourceGeneration.Host.SourceGeneratorHost.d__4.MoveNext()in 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>

没有成功。

此问题是否有解决方法?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

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

问题在于默认 &LT; Project Sdk =“Microsoft.NET.Sdk”&gt; .NETStandard项目不允许使用xamarin目标框架。 解决方案是使用https://github.com/onovotny/MSBuildSdkExtras

阅读README.md建议从VS15.6 +你可以交换&lt; Project Sdk =“Microsoft.NET.Sdk”&gt;与&lt; Project Sdk =“MSBuild.Sdk.Extras / 1.2.2”&gt;

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

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

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

更新:而不是写

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

还可以写

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