Я прочитал несколько сообщений (см. ссылки ниже) и еще не нашел руководства по передовым практикам, характерным для моего технологического стека.
Цель: Создать единый пакет NuGet, ориентированный на несколько .NET-фреймворков, построенных из одного файла .csproj через TeamCity с использованием MSBuild и NuGet.
Ограничения:
- Вытяните код из VCS только один раз.
- Все скомпилированные сборки должны быть одинаковыми версиями.
- Одиночный .csproj(не один для каждой целевой структуры).
У меня есть два подхода:
-
Создайте конфигурацию единой сборки. Он будет содержать три этапа сборки: компилировать .NET 3.5, компилировать .NET 4.0, пакет с NuGet. Каждый шаг сборки будет зависеть от успеха последнего. Единственная реальная проблема, которую я вижу при таком подходе (и, надеюсь, там есть решение, о котором я не знаю) состоит в том, что для каждого шага сборки потребуется собственный набор параметров построения (например, system.TargetFrameworkVersion и system.OutputPath) для обозначения уникальное место для размещения DLL (например, bin\release\v3.5 и bin\release\v4.0), чтобы шаг пакета NuGet мог выполнять свою работу на основе раздела Files в файле .nuspec.
-
Создайте несколько конфигураций сборки. Одна конфигурация сборки на шагах сборки, описанных выше. При таком подходе легко решить проблемы с параметрами сборки TargetFrameworkVersion и OutputPath, но теперь мне нужно создавать зависимости моментальных снимков и делиться номером версии сборки в сборках. Он также питается слотами конфигурации, которые подходят (но не оптимальны) для нас, поскольку у нас есть лицензия Enterprise.
Вариант №1 кажется очевидным выбором. Варианты № 2 чувствуют себя грязными.
Итак, мои два вопроса:
- Можно ли создавать параметры, которые являются уникальными для этапа сборки?
- Есть ли третий, лучший подход?
Литература:
- Многострочная структура NuGet с символами для управления внутренней зависимостью
- Nuget - упаковка решения с несколькими проектами (таргетинг на несколько фреймворков)
- http://lostechies.com/joshuaflanagan/2011/06/23/tips-for-building-nuget-packages/
- http://msdn.microsoft.com/en-us/library/hh264223.aspx
- qaru.site/info/225176/...
- http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters
- http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package