2015-07-31 15 views
6

Mam następujące ustawienia w projekcie ASP.NET Web API 2 programu Visual Studio 2013.Powiązania między konfiguracją rozwiązania, profilem publikowania i przekształceniami web.config

  • Web.Develop.config internetowej przekształcić ustawić ustawienia aplikacji wartość klucza
  • Web.Release.config internetowej przekształcić Aby usunąć ustawienia aplikacji kluczowych
  • Develop.pubxml mapować do Web.Develop. config przekształcić
  • Release.pubxml mapować do Web.Release.config przekształcić

dane dla każdego można znaleźć poniżej.

<!-- 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. --> 

Ilekroć opublikować aplikację poprzez wydaniu publikuje Profil Moje <appSettings/> element pomyślnie usunięty. Jednak element <appSettings/> jest usuwany również po uruchomieniu profilu publikowania w Develop.

Co chcę zrozumieć:

Dlaczego element <appSettings/> usuwane kiedy uruchomić rozwijać profilu publikowania zamiast ustawiania wartości ReportInputPath?

Jakie są relacje między konfiguracjami rozwiązania/projektu, profilami publikowania i przekształceniami web.config?

Odpowiedz

6

Odpowiedź na pytanie, dlaczego element <appSettings/> jest usuwany podczas uruchamiania profilu publikowania w Develop, to fakt, że dwie transformacje są uruchamiane w następującej kolejności.

  1. Web.Release.config. Jest to uruchamiane, ponieważ celem konfiguracji w pliku Develop.pubxml jest konfiguracja wersji Release.
  2. Web.Develop.config. Jest uruchamiany, ponieważ nazwa profilu publikowania (Develop) jest zgodna z nazwą pliku transformacji.

To, co się dzieje, to pierwsza transformacja usuwa element <appSettings/>. Druga transformacja próbuje ustawić wartość klucza w tym elemencie, ale nie może go znaleźć, więc cicho zawiedzie.

Udało mi się to potwierdzić, przeszukując dane wyjściowe konsoli. Po uruchomieniu transformacji Develop pojawiło się ostrzeżenie, że pożądanego elementu nie można znaleźć.

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 artykuł Sayed Ibrahim Hashimi był bardzo pomocny w identyfikacji był to problem.

Jeśli chodzi o relacje między konfiguracją kompilacji, publikowaniem profili i transformacją web.config, to mój obecny poziom zrozumienia jest taki.

  1. Publish profile mają (między innymi) cel konfiguracyjny
  2. profili publikowania najpierw uruchomić transformację, która mapuje do podanej nazwy docelowego ich konfiguracji, jeśli taki istnieje
  3. Publish profile następnie uruchomić transformację, która mapuje do ich publikować nazwę profilu, jeśli taki istnieje

Kluczem tutaj jest, że mogą być uruchamiane dwa transformacje web.config.

Powiązane problemy