как создать библиотеку основных классов .net

Я новичок в .net core. Мне нужна помощь в настройке файла project.json для создания библиотеки классов с ядром .net. На самом деле я прочитал много документов, но я потерялся, так как есть огромное количество вещей, которые нужно прочитать. Я знаю, что мне нужно использовать NETStandardLibray (https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md), но я не знаю, как поместить это в файл config.json.

Вот мой файл config.json:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    },
    "xunit": "2.1.0",
    "dotnet-test-xunit": "1.0.0-rc2-build10025"
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },
  "testRunner": "xunit"
}

Я хочу создать простую библиотеку классов для повторного использования в других проектах, а также хочу, чтобы у нее были модульные тесты.

Моя основная трудность здесь связана с прозвища. Они такой беспорядок. Я просто хочу создать библиотеку классов, которую можно использовать на любой платформе, но похоже, что мне все равно нужно выбрать платформу в моем проекте.json. В списке устаревших прозвищ я не знаю, какое прозвище мне следует использовать. Чтобы использовать стандартную библиотеку NET, должен ли я ориентироваться на платформу .NET Standard Application 1.5 с идентификатором nuget netcoreapp1.0 или использовать платформу .NET Platform 5.0 с идентификатором nuget netstandard1.3??? Какая правильная платформа? Разве библиотека NETStandard не должна была быть независимой от платформы? И я должен поместить эти идентификаторы в зависимости или в раздел фреймворков моего проекта.json? И чем вообще отличаются эти два раздела? я совсем запуталась :(


person Community    schedule 22.06.2016    source источник


Ответы (1)


Сама ваша библиотека классов должна иметь структуру netstandard1.3 или любую другую версию, которую вы хотите. Например, Noda Time нацелена на netstandard1.3, так как я обнаружил, что в netstandard1.0, к сожалению, слишком многого не хватает. Обычно я выбираю самую низкую версию, в которой вы уверены. Вам не нужны netcoreapp1.0 и т. д., поскольку вы пишете библиотеку, а не приложение.

Ваши модульные тесты должны быть в отдельном проекте, настроенном в соответствии с документацией xUnit — например, таргетинг netcoreapp1.0 и, возможно, net451 для запуска на платформе рабочего стола.

Чтобы ответить на ваши другие вопросы, хотя стандартная библиотека .NET не зависит от платформы (с точки зрения операционной системы), вам все равно нужно указать, от какой версии вы зависите - если вам нужно что-то, что есть только в netstandard1.5, вы не можете ориентироваться на netstandard1.3, Например.

Часть о включении Microsoft.NETCore.App и т. д. в раздел зависимостей (насколько я понимаю) состоит в том, чтобы избежать необходимости указывать каждую зависимость индивидуально модульным способом. Это простой способ начать работу, но позже вы, возможно, захотите уточнить, обрезать ваши зависимости только до тех, которые вам нужны.

Определенно многое еще висит в воздухе, много документации еще предстоит написать, много устаревшей документации и сообщений в блогах за последние пару лет... но прогресс есть.

person Jon Skeet    schedule 22.06.2016
comment
спасибо, Джон. Должен ли я зависеть от Microsoft.NetCore.App для моего проекта библиотеки классов? Есть ли зависимость, специфичная для стандартной библиотеки? - person ; 22.06.2016
comment
@andre: Нет, как я уже говорил, это не приложение, это библиотека, поэтому вам следует использовать netstandard1.x. Вы можете добавить зависимость к NetStandard.Library, если хотите - это эквивалент библиотеки, предоставляющий все части стандартной библиотеки .NET. Лично я бы порекомендовал использовать детализированные зависимости с самого начала. - person Jon Skeet; 22.06.2016
comment
Я все еще в замешательстве :( - person ; 11.11.2016
comment
@andre: К сожалению, то, что я все еще в замешательстве, не дает мне достаточно подробностей о том, какой аспект вас смущает. Что вы пробовали и что вызывает у вас проблемы? - person Jon Skeet; 11.11.2016
comment
Я сдался некоторое время назад из-за путаницы. Эта платформа многообещающая, но все еще очень запутанная. Это может быть проще для понимания. Сейчас я снова вернусь к учебе. - person ; 11.11.2016
comment
имена конфликтуют, когда вы сравниваете моникеры самородка с моникерами .net core - person ; 11.11.2016
comment
В любом случае, моя главная проблема заключается в том, что когда я выбираю netstandar1.3, компилятор просто игнорирует мою команду и вместо этого использует последнюю версию. - person ; 11.11.2016
comment
И еще тот факт, что у меня мало опыта работы с .net, поэтому платформа очень, очень, очень сбивает с толку новичков, изучающих саму себя. - person ; 11.11.2016
comment
И я не нашел в документах четкого объяснения различий между разделом зависимостей и разделом фреймворков. - person ; 11.11.2016
comment
@andre: Единственная часть того, с чем я действительно могу помочь, - это ваше утверждение о том, что компилятор просто игнорирует мою команду и вместо этого использует последнюю версию. Я очень сомневаюсь, что это так, но вам, вероятно, следует задать новый вопрос, показывающий, что именно вы имеете в виду, с минимально воспроизводимым примером< /а>. В целом я согласен с тем, что на данный момент это немного сбивает с толку - и имейте в виду, что project.json полностью исчезнет, ​​- но в этом ответе я объяснил, как мог, как создать библиотеку классов .NET Core. - person Jon Skeet; 11.11.2016
comment
что заменит project.json? - person ; 11.11.2016