Многофункциональная сборка NuGet с символами для управления внутренними зависимостями

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

У нас есть 4 основных продукта, которые живут во взаимосвязанных хранилищах Mercurial. Все они "доля" 3 основных сборки, а затем все остальное в значительной степени зависит от конкретного продукта. Это'Теперь стало очень трудно управлять, потому что один продукт был обновлен до .NET 4.0 и использует внешние зависимости, которые требуют .NET 4.0, в то время как другой продукт застрял в .NET 3.5 по причинам, которые мне не нужны.Я даже не хочу попасть.

Таким образом, мы утратили способность объединять различия между продуктами.

Чтобы исправить это, я хочу вынуть 3 основные сборки и превратить их в собственный проект с собственным циклом выпуска, а также позаботиться о том, чтобы они могли компилироваться как в .NET 3.5, так и в 4.0, а затем превратить их в Пакеты NuGet, содержащие несколько версий фреймворка.

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

Итак, я создалчастный сервер NuGet ичастный сервер SymbolSource, Затем я аккуратно объединил все изменения из всех репозиториев и выбросил все, кроме сборок ядра. Затем я тщательно отредактировал вручную файлы .csproj, чтобы вместо платформы AnyCPU каждый проект имел цели платформы 3.5 и 4.0, в которых указываются условные константы (для управления специфичными для платформы функциями, такими как System.Dynamic), и устанавливается версия платформы.

Затем я настроил конфигурации решений для "3.5 Отладка ","3.5 Выпуск ","4.0 Debug », а также "4.0 Release ", Каждый из них нацелен на соответствующую конфигурацию (отладка или выпуск) и платформу (3.5 или 4.0).

Я могу построить все хорошо в Visual Studio для любой платформы. Теперь у меня есть проблема, когда дело доходит до NuGet, потому что есть два способа создания пакета, и оба имеют слабость, если я нем чего-то не хватает:

Пакет по файлу проекта

nuget pack MyProject.csproj -Build -Symbols -Version  -Properties "Configuration=Release;Platform=3.5;"

Проблемы с этим:

В то время как версия 3.5 собрана и упакована, вывод говорит:Построение проекта для целевого каркаса ».NETFramework, Version = v4.0' .»Если я распаковываю полученные пакеты, сборки находятся подlib\net40 что неправильно.Я неНе думая, что таким способом можно упаковать 2 целевых фреймворка, вы должны сделать это иначе, с помощью папок и соглашений.Я готов принять, что ты можешья собираю вместе фреймворки и создаю 2 пакета под названием MyProject (который я бы сделал как 4.0) и MyProject.V35 ... однако я не могу 't выяснить, как создать один и тот же проект и nuspec и получить 2 разных результата с разными идентификаторами.

Пакет по Nuspec File

С помощью этого метода я должен сделать всю сборку самостоятельно, а затем выполнить кучу копирования файлов, чтобы настроить структуру папок, например

* MyProject.nuspec
* net40
    * MyProject.dll
    * MyProject.pdb
* net35
    * MyProject.dll
    * MyProject.pdb

Тогда я могу бежатьnuget pack MyProject.nuspec но тогда нет никакого источника, чтобы идти с символами, потому что без файла .csproj у NuGet нет никакого способа выяснить, где взять все исходные файлы, и я неТакже не смотрите документацию о том, как это сделать, используя соглашения о каталогах.

Итак, мои вопросы:

Есть ли способ добавить исходные файлы в пакет на основе соглашения?Есть ли способ дважды упаковать пакет на основе проекта с разными идентификаторами?Может быть, у меня есть еще один проспект?Т рассмотрены?

Любые мысли будут высоко ценится.

Ответы на вопрос(3)

Ваш ответ на вопрос