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.