Xml-преобразование для связанного web.config

В моем решении VS 2010 у меня есть четыре веб-проекта.

Первый проект – проект развития. Остальные три служат только для публикации другого подмножества страниц первого проекта. Почти все файлы в остальных трех проектах являются ссылками на файлы первого проекта.

Все проекты используют один и тот же файл web.config (связанный с первым проектом).

Чего я хочу добиться, так это иметь различные xml-преобразования web.config в соответствии с публикуемым проектом. Опция «Добавить преобразования конфигурации» хорошо работает только в первом проекте, где на самом деле находится файл. Кажется, вы не можете добавить преобразования конфигурации для связанного web.config. Преобразования добавляются, но они, похоже, не ссылаются на связанный web.config и, похоже, не выполняются.

Я пытался возиться с файлом *.csproj вручную, чтобы эти преобразования ссылались на связанный файл, но я не смог заставить его работать.

Есть ли способ преобразовать конфигурацию xml для связанного файла web.config?

ВРЕМЕННОЕ РЕШЕНИЕ

Я просто использовал обходной путь ниже:

Я создал обычные файлы web.config для каждого проекта (без ссылки на web.config первого проекта). Я добавил нужные преобразования в файл web.config каждого проекта. Затем в каждом проекте я добавлял событие Before Build, которое копировало и перезаписывало файл web.config первого проекта в файл web.config текущего проекта. Таким образом, преобразования выполняются в новом перезаписанном файле конфигурации, и правильная конфигурация публикуется.

Хотя мой вопрос в силе.


person Thanasis Ioannidis    schedule 22.09.2014    source источник
comment
Какие части файла web.config отличаются? Я храню свои ограничения и настройки приложений в отдельном файле конфигурации и связываю их с помощью атрибута configSource. Возможно, вы могли бы сделать что-то подобное и иметь разные части в каждом проекте, но основной web.config в первом проекте   -  person matt_lethargic    schedule 22.09.2014
comment
@matt_lethargic Я еще не смотрел атрибут configSource. Я посмотрю на это, спасибо!   -  person Thanasis Ioannidis    schedule 23.09.2014


Ответы (1)


Вы можете записывать/переписывать любые источники/шаблоны преобразования внутри файла проекта по любым путям.

Вот мой реальный пример для автономного приложения. Решение вашей проблемы в нижней части сообщения с ответом.
У меня есть решение с двумя проектами:
1. Исходный проект "NetrikaLabManager" с реальным App.config и двумя конфигурациями преобразования (App.Debug.config и App .Release.config)
2. Целевой проект "NetrikaLabManagerGui" и мне нужна такая же конфигурация с теми же правилами преобразования, что и в первом проекте.

Мои следующие шаги:

  1. Просто свяжите три исходных файла конфигурации с целевым проектом в виде ссылок. Это просто для пометки о внешних конфигурациях и может быть пропущено.
  2. Откройте целевой файл .proj для редактирования и внесите следующие изменения:
    2.1. Изменение пути проверки файлов в состоянии трансформации: <Target Name="AfterCompile" Condition="Exists('app.$(Configuration).config')">
    на
    <Target Name="AfterCompile" Condition="Exists('..\NetrikaLabManager\App.$(Configuration).config')">
    2.2. Изменение путей в элементе "TransformXml"
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    на
    <TransformXml Source="..\NetrikaLabManager\App.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="..\NetrikaLabManager\App.$(Configuration).config" />
  3. Сохраните, перезагрузите проект и перестройте.
  4. Выгода!

Резюме по вашему вопросу. В каждом файле проекта вы должны вручную добавить любые «настоящие» файлы преобразования конфигурации в свои вспомогательные проекты и оставить атрибуты «Преобразование» и «Условие» без изменений, но изменить атрибут пути «Источник» на Ваш файл конфигурации Dev. Это будет применение отдельных спутниковых преобразований для конфигурации Dev.

person Leon Pro    schedule 22.03.2017
comment
Почему бы не изменить Condition=Exists('app.$(Configuration).config')› на Condition=Exists('..\NetrikaLabManager\App.$(Configuration).config')› Тогда вам не нужно копировать файл непосредственно в отдельные проекты - person Soeren L. Nielsen; 05.07.2017