Laden...

MSBuild: XDT Transformation beim Builden

Erstellt von Davaaron vor 3 Jahren Letzter Beitrag vor 3 Jahren 341 Views
D
Davaaron Themenstarter:in
106 Beiträge seit 2016
vor 3 Jahren
MSBuild: XDT Transformation beim Builden

Hi,

mein Ziel ist es, meine App.*.config Dateien bei jedem Build-Durchlauf zu transformieren, so dass immer die korrekte App.config bereitgestellt wird.
Dazu habe ich in meiner *.csproj folgendes hinzugefügt:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="CoreCompile" Condition="exists('app.$(Configuration).config')">
    <!-- Generate transformed app config in the intermediate directory -->
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    <!-- Force build process to use the transformed configuration file from now on. -->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="app.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>

Dies funktioniert, wenn der obj/Debug bzw obj/Release Ordner vorhanden sind und die *.exe ebenfalls. Lösche ich allerdings den obj-Ordner, dann funktioniert das Builden nicht mehr. Fehlermeldung:

  Microsoft.Common.CurrentVersion.targets(4187, 5): [MSB3030] Datei "obj\Debug\MeinProjekt.exe" konnte nicht kopiert werden, da die Datei nicht gefunden wurde.

Wieso wird diese Fehlermeldung geworfen? Ich versuche doch gar nicht auf die *.exe zuzugreifen. Vielleicht wegen der Variable $(TargetFilename)?

D
Davaaron Themenstarter:in
106 Beiträge seit 2016
vor 3 Jahren

Wie fast immer: Ich schreibe einen Post und danach fällt mir die Lösung ein.. 😄

Der Name des Target-Elements muss auf "AfterBuild" gestellt werden und app.config muss App.config heißen. Das wars auch schon.