2015-07-31 8 views
6

У меня есть следующая настройка в проекте ASP.NET Web API 2 для Visual Studio 2013.Связь между конфигурацией решения, публикацией профиля и преобразованиями web.config

  • Web.Develop.config веб-преобразования, чтобы установить параметры приложения значение ключа
  • Web.Release.config веб-преобразования, чтобы удалить приложение настройки ключевых
  • Develop.pubxml для сопоставления Web.Develop. конфигурации преобразования
  • Release.pubxml для отображения на Web.Release.config преобразования

Детали для каждого из них приведены ниже.

<!-- Web.Develop.config (Web Config Transform) --> 
<appSettings> 
    <add key="ReportInputPath" 
     value="DevelopPath" 
     xdt:Transform="SetAttributes" 
     xdt:Locator="Match(key)" /> 
    </appSettings> 
<!-- Web.Release.config (Web Config Transform) --> 
<appSettings xdt:Transform="Remove" /> 
<!-- **Develop.pubxml (Publish Profile) --> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>x64</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>True</ExcludeApp_Data> 
    <publishUrl>Path</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles 
    <ExcludeFilesFromDeployment>packages.config</ExcludeFilesFromDeployment> 
    </PropertyGroup> 
</Project> 
<!-- Release.pubxml (Publish Profile) --> 
<!-- Contents are identical to Develop.pubxml. 
    This is used to target the Web.Release.Config transform. --> 

Всякий раз, когда я опубликовать приложение через Выпуск опубликовать профиль моего <appSettings/> элемента успешно удален. Тем не менее, элемент <appSettings/> удаляется при запуске профиля публикации публикации.

То, что я хочу, чтобы понять:

Почему <appSettings/> элемент удаляется при запуске Develop опубликовать профиль вместо установки значения ReportInputPath?

И каковы отношения между конфигурациями решений/проектов, публикацией профилей и преобразованием web.config?

ответ

6

Ответ на вопрос, почему элемент <appSettings/> удаляется при запуске профиля разработки, потому что два преобразования выполняются в следующем порядке.

  1. Web.Release.config. Это выполняется, поскольку целью конфигурации в файле Develop.pubxml является конфигурация сборки Release.
  2. Web.Develop.config. Это выполняется, потому что имя профиля публикации (Develop) соответствует имени файла преобразования.

Что происходит, первая трансформация удаляет элемент <appSettings/>. Второе преобразование пытается установить значение ключа в этом элементе, но не может его найти, поэтому он бесшумно выходит из строя.

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

Example (shortened for clarity) 
> TransformXml: Applying Transform File: C:\...\MyProject\Web.Develop.config 
> C:\...\MyProject\Web.Develop.config(6,4): Warning : No element in the source document matches '/configuration/appSettings' 
> TransformXml: Not executing SetAttributes (transform line 9, 10) 

Profile specific web.config transforms and transform preview статья Сайед Ибрагим Хашими был очень полезным в определении этого был вопрос.

Что касается отношений между конфигурацией сборки, публикацией профилей и преобразованием web.config, то мое нынешнее понимание - это.

  1. Опубликовать профили имеют (среди прочего) цель конфигурации
  2. Publish профили первого запуска преобразования, переводящий в их указанной конфигурации имя цели, если таковой существует
  3. Публикация профилей затем запустить преобразование, переводящее в их опубликовать имя профиля, если таковой существует

Ключ здесь в том, что два web.config преобразования могут быть запущены.