在 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)')" />
重现:
下载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)')" />