Можно ли использовать инструментарий.NET Core 2 SDK для создания библиотеки классов, предназначенной для.NET Framework 2.0?

Это может показаться вечностью, но у меня все еще есть требование разработать библиотеку классов, предназначенную для.NET Framework 2.0. Наши сценарии сборки требуют Visual Studio 2010 и вызывают devenv.exe, передавая ему путь к файлу нашего решения.

У нас есть новое требование для создания библиотеки классов, предназначенной для.NET Core 2.0 (с долгосрочной целью нацеливания на версию.NET Standard). С изменением дизайна.NET нам больше не нужна среда IDE, а вместо этого требуется инструментарий.NET Core 2 SDK.

Я заметил, что команда сборки dotnet принимает --framework аргумент. Страница Target Frameworks показывает net20 поддерживаемый TFM. Чтобы понять, что происходит, я нацелился на net20 и получил следующее сообщение об ошибке:

C: \ cli \ sdk \ 2.0.0 \ Microsoft.Common.CurrentVersion.targets (1122,5): ошибка MSB3644: не найдены эталонные сборки для фреймворка ".NETFramework,Version=v2.0". Чтобы решить эту проблему, установите SDK или Targeting Pack для этой версии платформы или перенастройте свое приложение на версию платформы, для которой у вас установлен SDK или Targeting Pack. Обратите внимание, что сборки будут разрешены из глобального кэша сборок (GAC) и будут использоваться вместо ссылочных сборок. Поэтому ваша сборка может быть неправильно нацелена на ту платформу, которую вы намереваетесь. [C:\ путь \ к \ My\project.csproj]

На вкладке "Приложение" свойств моего проекта в Visual Studio 2017 раскрывающийся список "Целевая платформа" содержит ссылку " Установить другие платформы...". Самая старая из перечисленных версий.NET Framework - 3.5 SP1 и не имеет ссылки на Dev Pack. Возможно ли то, что я пытаюсь сделать? Если да, где я могу найти целевой пакет.NET Framework 2.0?

2 ответа

.NET CLI (dotnet build и аналогичные команды) нельзя использовать при нацеливании на версии.NET ниже 4.*, поскольку MSBuild работает по-разному для этих платформ, а версия MSBuild.NET Core не может выполнять требуемые действия. Тем не менее, вы можете использовать msbuild.exe из командной строки разработчика.

Для сборки для 2.* CLR вам нужно установить фреймворк. Пакеты таргетинга являются концепцией 4.*, и msbuild ожидает, что сможет использовать установленную платформу для приложений, ориентированных на.NET < 4.*. (чтобы быть конкретным: MSBuildTaskHost.exe будет запущен с использованием платформы.NET 3.5).

Хотя я не пытался собрать для 2.0, сборка для 3.5 (это единственная версия, все еще поддерживаемая Microsoft (3.5 SP1)) возможна и поддерживается.

На самом деле, нетрудно найти.NET 2.0, несмотря на то, что Microsoft не любит делать это легко

(i) Пакет разработки программного обеспечения.NET Framework 2.0 (SDK) (x64) или

(ii) Пакет разработки программного обеспечения.NET Framework 2.0 (SDK) (x86)

Другая проблема заключается в том, чтобы получить систему сборки.NET Core с использованием.NET Framework 2.0 в качестве цели. Roslyn поддерживает таргетинг на.NET 2.0, но трудно сказать, как поведет себя система сборки.NET Core. Однако, поскольку все с открытым исходным кодом, это, безусловно, может быть сделано. Вопрос только в том, сколько работы потребуется. Попробуйте использовать фреймворки, которые я указал, и опубликуйте результаты, возможно, я мог бы помочь обойти некоторые проблемы.

Другие вопросы по тегам