VS2017 создает библиотеку для нескольких целевых фреймворков

У меня есть простая Dll, в которой я определил такой класс:

public class Parameters 
{
    public string Message { get; set; }
}

Я добавил пакет NuGet Newtonsoft.Json.

Эта DLL ДОЛЖНА использоваться приложениями netcoreapp1.1 и net462.

Я попытался изменить csproj и добавил это

<TargetFramework>netstandard1.5</TargetFramework>

Если я запускаю сборку dotnet, dll была успешно собрана, но я не могу использовать DLL ни из приложения netcore, ни из net462.

В частности, если я добавляю тест xUnit и ссылаюсь на класс внутри DLL, возникает ошибка:

System.IO.FileLoadException: Не удалось загрузить файл или сборку «System.Runtime, версия = 4.1.0.0 [..]

Кто-нибудь может объяснить мне, как работают целевые фреймворки net462, netcoreapp и netstandard1.5? А как построить кросс-фреймворк dll?

ОБНОВЛЕНИЕ

Чтобы найти связанную сборку, необходимо добавить приведенный ниже код в xunit .csproj.

<OutputType>Exe</OutputType>

person Max    schedule 13.04.2017    source источник
comment
вы можете добавить несколько фреймворков в ‹TargetFramework›, разделив их точкой с запятой   -  person Alexan    schedule 13.04.2017


Ответы (1)


Таблицу для поддерживаемых .Net Standard платформ можно найти здесь. Вы должны понимать, что .Net Standard — это не фреймворк, это правила, которые библиотеки должны реализовать для поддержки .Net Standard.

Итак, если вам нужно, чтобы ваша библиотека поддерживала как .Net Core, так и .Net Framework 4.6, вам нацелена .Net Standard 1.6.1 (!) , а не 1.5 или 1.6, и .Net Framework, согласно этому блогу (обратите внимание на форму множественного числа тега).

<TargetFrameworks>netstandard1.6.1;net462</TargetFrameworks>

Может и без net462 заработает, так как должна поддерживать версию 1.6, позже обновлю для этого.

Также я нашел xUnit сообщение в блоге о запуске тестов для нескольких целей, они использовали это:

<PropertyGroup>
  <TargetFrameworks>net452;netcoreapp1.1</TargetFrameworks>
</PropertyGroup>

Обратите внимание, что они нацелены на netcoreapp, а не на netstandard.

person VMAtm    schedule 13.04.2017
comment
Я изменил тег вот так <TargetFrameworks>net462;netcoreapp1.1</TargetFrameworks> и теперь компилирую и запускаю. Я нашел ссылку github netstandard на таблицу netstandard, но я думаю, что в Microsoft есть некоторая путаница. - person Max; 14.04.2017
comment
xUnit продолжает выдавать ошибку о невозможности найти dll, но если я напишу простую консольную программу, она запустится - person Max; 14.04.2017
comment
Я думаю MS просто ждет версию 2.0 для стандарта - person VMAtm; 14.04.2017
comment
Связано с @Max: stackoverflow.com/a/42364427/213550 Вы должны ориентироваться на несколько сетей - person VMAtm; 19.04.2017