Ссылка на проект.netstandard2_0 в проекте platform.uno

Воспроизвести:

Скачать https://github.com/nventive/Uno.QuickStart

Добавьте.NETStandard2_0 проект под названием TestMe.

Ссылка TestMe в проекте MyApp.Droid.

Сборка MyApp.Droid приводит к ошибке компиляции:

System.InvalidOperationException: ProjectM (s) TestMe не предоставил никакой ссылки метаданных. Это может быть связано с неверным путем, таким как $(SolutionDir), используемый в csproj; попробуйте вместо этого использовать относительные пути. Это также может быть связано с отсутствующей директивой конфигурации по умолчанию. Обратитесь к файлу Unme.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>

безуспешно.

Есть ли решение этой проблемы?

2 ответа

Решение

К сожалению, это известная проблема Roslyn здесь: https://github.com/nventive/Uno.SourceGeneration/issues/2

Чтобы обойти это, вы должны включить все платформы, которые вы хотите поддерживать, в свой узел TargetFrameworks, который в вашем случае - MonoAndroid80 (или аналогичный).

Благодаря Джерому я нашел прозвище целевой структуры xamarin https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/nuget-manual

Проблема заключается в том, что по умолчанию проекта.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 должно точно соответствовать версии проекта Android. -> MonoAndroid81 для Oreo8.1

ОБНОВЛЕНИЕ: вместо того, чтобы писать

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

можно также написать

<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="$(MSBuildSDKExtrasTargets)" Condition="Exists('$(MSBuildSDKExtrasTargets)')" />
Другие вопросы по тегам