Можно ли использовать инструментарий .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 build принимает аргумент --framework. На странице Целевые платформы показано 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: \ путь \ к \ моему \ проекту.csproj]

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


person Jeffrey LeCours    schedule 08.11.2017    source источник


Ответы (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)) возможна и поддерживается.

person Martin Ullrich    schedule 08.11.2017
comment
Я надеялся использовать .NET CLI с моими сборками на основе CLR 2.0. Судя по тому, что вы говорите, это невозможно. Когда вы говорите 4. *, вы на самом деле имеете в виду 4.0? Или вы действительно имеете ввиду 4.5+? - person Jeffrey LeCours; 09.11.2017
comment
Я действительно имею в виду 4.0+, хотя получить для него рабочий пакет таргетинга может быть сложно. Могут быть способы переопределить некоторые переменные msbuild, чтобы указать местоположение для эталонных сборок net20 / net35, но вам лучше использовать msbuild.exe из VS или mono msbuild (который может создавать проекты SDK для ядра .net и полного .net на всех поддерживаемых платформах) - person Martin Ullrich; 09.11.2017

На самом деле найти .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. Однако, поскольку все имеет открытый исходный код, это, безусловно, можно сделать. Вопрос только в том, сколько для этого потребуется работы. Попробуйте использовать указанные мной фреймворки и опубликуйте результаты, возможно, я смогу помочь решить некоторые проблемы.

person Jacek Blaszczynski    schedule 08.11.2017
comment
Спасибо, что поделились этими ссылками. - person Jeffrey LeCours; 09.11.2017