重现:
下载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>
没有成功。
此问题是否有解决方法?
答案 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)')" />