App.Config Преобразование для проектов, которые не являются веб-проектами в Visual Studio? - PullRequest
512 голосов
/ 09 июня 2010

Для веб-приложения Visual Studio 2010 у нас есть функции преобразования конфигурации, с помощью которых мы можем поддерживать несколько файлов конфигурации для разных сред. Но та же функция недоступна для файлов App.Config для служб Windows / WinForms или консольного приложения.

Существует обходной путь, предложенный здесь: Применение магии XDT к App.Config .

Однако это не так просто и требует ряда шагов. Есть ли более простой способ добиться того же для файлов app.config?

Ответы [ 14 ]

3 голосов
/ 27 августа 2010

Я решаю эту проблему с помощью этого инструмента http://ctt.codeplex.com/. Я использую его со сценарием CCNet / nAnt для создания пакетов.

2 голосов
/ 22 июня 2010

Я создал другую альтернативу той, которую опубликовал Вишал Джоши, где снято требование изменить действие сборки на Содержимое , а также реализована базовая поддержка развертывания ClickOnce.Я говорю простой, потому что я не тестировал его полностью, но он должен работать в типичном сценарии развертывания ClickOnce.

Решение состоит из одного проекта MSBuild, который когда-то был импортирован в существующий проект приложения Windows (* .csproj).) расширяет процесс сборки для рассмотрения преобразования app.config.

Более подробное объяснение можно прочитать по адресу Преобразование XML Visual Studio App.config , и файл проекта MSBuild можно загрузить от GitHub .

1 голос
/ 18 марта 2015

Если вы используете TFS онлайн (облачная версия) и хотите преобразовать App.Config в проект, вы можете сделать следующее без установки каких-либо дополнительных инструментов.Из VS => Выгрузить проект => Редактировать файл проекта => Перейти в конец файла и добавить следующее:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild" Condition="Exists('App.$(Configuration).config')">
<TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(OutDir)\$(AssemblyName).dll.config" />

AssemblyFile и Destination работают для локального использования и TFS онлайн (Облачный) сервер.

0 голосов
/ 06 октября 2016

предлагаемое решение не будет работать, если ссылка на библиотеку классов с файлом конфигурации указана в другом проекте (в моем случае это была библиотека рабочего проекта Azure). Он не скопирует правильный преобразованный файл из папки obj в папку bin\##configuration-name##. Чтобы это работало с минимальными изменениями, вам нужно изменить AfterCompile target на BeforeCompile:

<Target Name="BeforeCompile" Condition="exists('app.$(Configuration).config')">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...