В Visual Studio возможно ли ориентироваться на .NET 4.x CLR, но на API библиотеки классов 2.0? - PullRequest
2 голосов
/ 15 октября 2019

Когда вы выбираете целевую инфраструктуру проекта C # в Visual Studio, вы фактически выбираете сразу три разные вещи (насколько я понимаю).

При выборе .NET 4.7.2 будет выбрано:

  • языковая версия (например, C # 7.2)
  • версия CRL (общеязыковой среды выполнения) (например, 4.5)
  • и версия BCL (библиотеки базовых классов) (например,4.7.2)

Теперь, возможно ли как-то настроить эти вещи независимо? Я понимаю, что есть зависимости, но нацеливание на более низкий API BCL должно работать, верно?

Причина заключается в следующем: мой проект - это библиотека классов C #, которая используется внутри приложения Unity3D. Unity имеет CLR 4.x (совместимую), но давайте выберем между API .NET Standard 2.0 и 4.x. Как правило, имеет смысл ориентироваться на 2.0, поскольку он меньше и 4.x не работает на всех платформах, которые поддерживает Unity.

Было бы здорово, если бы я мог воспроизвести эту конфигурацию в Visual Studio. В противном случае я мог бы случайно сделать недопустимый (то есть> 2.0) вызов API в своем коде dll и узнаю, только когда код завершится с «классом / функцией, не найденной» в Unity.

1 Ответ

0 голосов
/ 15 октября 2019

Языковая версия может быть установлена ​​полностью независимо с помощью <LangVersion> в csproj, т.е.

<LangVersion>8.0</LangVersion>

Версии CLR и BCL являются ... сложными. Вы действительно нацелены на TFM здесь. Звучит так, как вы хотите (опять же, в csproj)

<TargetFramework>netstandard2.0</TargetFramework>

Фактический CLR (время выполнения) определяется независимо от того, что он запускается , а не библиотекой. Но вы можете использовать несколько целей, если это станет полезным, например,

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

и настроить различные зависимости и #if и т. Д. Для разных платформ, чтобы максимально использовать каждую из них. Может ли Unity правильно использовать многоцелевой пакет - это другой вопрос, на который я не могу ответить.

Вы можете редактировать csproj в любой момент;вы не привязаны к тому, что генерируется из шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...