условные ссылки на сборку на основе решения

У меня довольно большое решение, состоящее примерно из 10 разных проектов. До сих пор мы отправляли клиентам все решение целиком, но мы планируем выпустить урезанную версию нашего программного обеспечения.

С этой целью я хотел бы исключить из решения несколько проектов. Я знаю, что вы можете предотвратить создание проектов в диспетчере конфигурации решения. Используя макросы, можно отключить все ссылки на код, если выбрана удаленная конфигурация. К сожалению, это не касается ссылок на проекты. Могу ли я сделать эти ссылки условными в зависимости от выбранной конфигурации?


person Wouter    schedule 21.04.2009    source источник


Ответы (4)


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

Я подозреваю, что это будет самое простое решение.

person Jon Skeet    schedule 21.04.2009
comment
Лично я предпочел бы статическое решение динамическому. Запуск макросов в файлы вашего проекта - хороший способ выстрелить себе в ногу. - person Randolpho; 21.04.2009
comment
Я никогда не предлагал настоящих макросов - только сценарии, которые знали, что нужно удалить. Я подозреваю, что это может оказаться более простым решением (и тем, которое упрощает дальнейшую разработку), чем использование нескольких решений. - person Jon Skeet; 21.04.2009

Я считаю, что это нужно делать, когда вы строите свои проекты для продакшена. Просто заключите весь код, который должен исчезнуть, между IF на уровне компилятора, который проверяет наличие определенной директивы компилятора. Если включено, то код между IF и ENDIF не будет компилироваться. Это работает только для файлов кода.

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

person Slavo    schedule 21.04.2009

Лучше всего создавать отдельные проекты для вашего «урезанного» решения, которое ссылается только на те другие проекты, которые вам нужны. Ссылка на тот же код. Создайте отдельное решение, чтобы объединить эти проекты.

Все они могут жить вместе в одной и той же структуре папок.

Например:

  • MySolution / MySolution.sln
  • MySolution / MyStrippedDownSolution.sln
  • MySolution / MyProject1 / MyProject1.csproj
  • MySolution / MyProject1 / MyStrippedDownProject1.csproj
  • MySolution / MyProject1 / MyClass1.cs
  • MySolution / MyProject2 / MyProject2.csproj
  • MySolution / MyProject2 / MyStrippedDownProject2.csproj
  • MySolution / MyProject2 / MyClass2.cs
  • MySolution / MyProject2 / MyProject3.csproj
  • MySolution / MyProject2 / MyClass3.cs

    • MyProject1 and MyStrippedDownProject1 reference MyClass1
    • MyProject2 и MyStrippedDownProject2 ссылаются на MyClass2
    • MyProject3 и MyStrippedDownProject3 ссылаются на MyClass3
  • MySolution ссылается на MyProject1, MyProject2 и MyProject3

  • MyStrippedDownSolution ссылается на MyStrippedDownProject1 и MyStrippedDownProject2
  • MyProject1 ссылается на MyProject2 и MyProject3
  • MyStrippedDownProject1 ссылается только на MyStrippedDownProject2 - он не ссылается на MyProject3
person Randolpho    schedule 21.04.2009
comment
К сожалению, это не сработает, поскольку один из проектов - это система меню, которая ссылается почти на все другие проекты. - person Wouter; 21.04.2009
comment
Я не слежу. Как это не сработает? Вы копируете файл проекта, переименовываете его в StrippedDownProject или что-то еще и удаляете ненужные ссылки. - person Randolpho; 21.04.2009

На странице http://bytes.com/topic/net/answers/444853-conditional-assembly-reference, который я нашел очень полезным для решения аналогичного вопроса (хотя он больше относится к ссылкам на сборки, чем к ссылкам на проекты). MSBuild получить ссылку на сборку из ProjectReference может помочь в наведении мостов между ними.

person Ruben Bartelink    schedule 26.11.2009