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)?
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.