2015-07-21 17 views
5

Mam rozwiązanie, które obejmuje trzy projekty internetowe (a także wiele projektów bibliotek klasowych). Wszystkie projekty internetowe używają transformacji Web.config, aby określić konfigurację dla środowiska.Transformacja Web.config jest uruchomiona dwa razy w publikacji

mam Web.config przemienia dla wielu profili budować, nazwanych Web.UAT.config, Web.Staging.config i Web.Release.config

buduję i wdrażania projektu z mojego serwera CI wykorzystaniem MSBuild z następującymi argumentami:

/t:Clean,Build /p:Configuration=UAT;DeployOnBuild=True;PublishProfile=UAT 

dla dokładnie jeden z trzech projektów, web.config przekształca wydają się stosować dwa razy, z elementami oznaczone xdt:Transform="Insert" pojawiające się dwukrotnie. Patrząc na wyjściu budowy, wydaje się, że wszystkie trzy projekty uruchom następujące cele:

PreTransformWebConfig 
TransformWebConfigCore 
PostTransformWebConfig 
PreProfileTransformWebConfig 

ale problematyczny projekt prowadzi także tych celów (zaraz po tych wymienionych powyżej):

ProfileTransformWebConfigCore 
PostProfileTransformWebConfig 

Odpowiedz

5

The .csproj plików w internecie projekty obejmują brzmienie domyślnie:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 

ten plik kolei import \Web\Microsoft.Web.Publishing.targets, także pod VSToolsPath (na moim komputerze, to odpowiada C:\Program Files (x86)\MSBuild\VisualStudio\v12.0).

Interesujący segment tego pliku wygląda następująco:

<ProjectProfileTransformFileName Condition="'$(ProjectProfileTransformFileName)'=='' And '$(PublishProfileName)' != '' ">$(_ProjectConfigFilePrefix).$(PublishProfileName)$(_ProjectConfigFileExtension)</ProjectProfileTransformFileName> 

<!--if $(TransformWebConfigEnabled) is also enabled and the ConfigTransform and ProfileTransform happen to have same filename, we default $(ProfilefileTransformWebCofnigEnabled) to false so it doesn't do double transform--> 
<ProfileTransformWebConfigEnabled Condition="'$(ProfileTransformWebConfigEnabled)'=='' And '$(TransformWebConfigEnabled)' == 'true' And ('$(ProjectProfileTransformFileName)' == '$(ProjectConfigTransformFileName)')">False</ProfileTransformWebConfigEnabled> 

Podwójna transformują się dzieje w wyniku ProfileTransformWebConfigCore bieganie, które jest uzależnione od ProfileTransformWebConfigEnabled, co tylko defaults false jeśli ProjectProfileTransformFileName i ProjectConfigTransformFileName są równe.

Dodałem następujący cel wszystkich trzech moich projektów:

<Target Name="DebugWebConfigTransform" AfterTargets="PreProfileTransformWebConfig"> 
    <Message Text="ProjectProfileTransformFileName: $(ProjectProfileTransformFileName)"/> 
    <Message Text="ProjectConfigTransformFileName: $(ProjectConfigTransformFileName)"/> 
    </Target> 

Dla problematycznego projektu, to wyjście cel następujące:

DebugWebConfigTransform: 
    ProjectProfileTransformFileName: Web.UAT.config 
    ProjectConfigTransformFileName: Web.Release.config 

Ponieważ te dwie wartości są różne, podwójna transformacja wystąpiła z powodów opisanych powyżej.

Powodem, dla którego nazwa ProjectConfigTransformFilename została ustawiona na Web.Release.config, był plik ProjectConfigurationPlatforms w moim pliku .sln, który był niepoprawny. Para konfiguracji .sln pliku | platformy UAT|Any CPU została zamapowana do Release|Any CPU dla tego projektu.

myślę, że faktycznie stosowania wydaniu UAT i przekształca w wyniku (ze względu na dokładny charakter moich przekształca i kolejności, w jakiej zostały one zastosowane, to było nie do odróżnienia od stosowania UAT przekształcić dwa razy).

Zaktualizowanie mapowania ProjectConfigurationPlatforms w pliku rozwiązania rozwiązało problem.

0

Ten problem wystąpił, ponieważ miałem wiele projektów w konfiguracji mojego rozwiązania przy użyciu różnych konfiguracji.

Został uruchomiony więcej niż jeden web.config przekształca powodu tej konfiguracji:

Configuration Manager

Po załączeniu projekty używać tej samej konfiguracji nie mam już odebrany kwestie w moim web.config.

Powiązane problemy