6

To reproduce:

Download https://github.com/nventive/Uno.QuickStart

Add a .NETStandard2_0 project called TestMe.

Reference TestMe in the MyApp.Droid project.

Building MyApp.Droid brings compile error:

System.InvalidOperationException: The project(s) TestMe did not provide any metadata reference. This may be due to an invalid path, such as $(SolutionDir) being used in the csproj; try using relative paths instead.This may also be related to a missing default configuration directive. Refer to the Uno.SourceGenerator Readme.md file for more details. at Uno.SourceGeneration.Host.SourceGeneratorHost.d__4.MoveNext() in C:\projects\uno-sourcegeneration\src\Uno.SourceGenerationHost.Shared\SourceGeneratorHost.cs:line 303 MyApp.Droid

I already tried to change TestMe.csproj to

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

or

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

without success.

Is there a workaround for this problem?

Henk
  • 750
  • 10
  • 21

2 Answers2

5

Unfortunately, this is a known Roslyn issue here: https://github.com/nventive/Uno.SourceGeneration/issues/2

To work around this, you must include all the platforms you want to support in your TargetFrameworks node, which in your case is MonoAndroid80 (or similar).

Jérôme Laban
  • 5,224
  • 3
  • 20
  • 17
4

Thanks to Jerome i found the xamarin target framework moniker https://learn.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-manual

The problem is that the default < Project Sdk="Microsoft.NET.Sdk" > of the .NETStandard project doesn't allow xamarin target frameworks. The solution is to use https://github.com/onovotny/MSBuildSdkExtras

Reading the README.md suggest that from VS15.6+ you can exchange < Project Sdk="Microsoft.NET.Sdk"> with < Project Sdk="MSBuild.Sdk.Extras/1.2.2">

the updated TestMe.csproj must look like this

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

ATTENTION: The monodroid moniker of the .netstandard project must match exactly the Android project version. --> MonoAndroid81 for Oreo8.1

UPDATE: Instead of writing

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

one can also write

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" />
Henk
  • 750
  • 10
  • 21