Wie kann ich den Web.debug.config
in Visual Studio 2010 integrierten Debugger zusammenführen und verwenden?
Antworten:
Dies ist ein bekannter Fehler. Diese Funktion kann derzeit nur als Teil des Bereitstellungsprozesses verwendet werden.
Bitte stimmen Sie dem zu, wenn Sie auch darauf stoßen, damit dies so schnell wie möglich behoben wird.
Dies ist eigentlich recht einfach und, ob Sie es glauben oder nicht, es scheint, dass VS so funktioniert.
Fügen Sie die folgenden Zeilen wörtlich direkt vor dem schließenden "Project" -Tag der .csproj-Datei des Projekts hinzu, das web.config enthält.
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform">
<MakeDir Directories="obj\$(Configuration)" Condition="!Exists('obj\$(Configuration)')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="obj\$(Configuration)\Web.config" StackTrace="true" />
</Target>
Fügen Sie die folgenden Zeilen wörtlich in das Post-Build-Ereignis in den Projekteigenschaften des Projekts ein, das die Datei web.config enthält. Führen Sie dies für jede Build-Konfiguration aus, für die die Transformationen ausgeführt werden sollen.
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y
Web.config
, sodass alle Ihre Transformationen "idempotent" sein müssen (kann erneut auf die Ergebnisse aller anderen Transformationen angewendet werden ). Es wird Sie auch daran hindern, Ihre geistige Gesundheit zu bewahren, wenn Sie die Datei in die Quellcodeverwaltung stellen (wie Sie es wahrscheinlich sollten). Insgesamt ein "einfacher" Hack, der die Komplexität / den Schmerz auf die nächsten Probleme verlagert. Gut, wenn Sie es dort "besser" angehen können, schlecht, wenn Sie es nicht tun. Erwägen Sie auch, $ (VisualStudioVersion) zu verwenden, anstatt die VS-Version fest zu codieren (Sie werden vergessen, sie zu ändern).
Ich hatte dies auf einfachere Weise gelöst, indem ich dies am Ende der .csproj-Datei direkt vor dem Tag hinzufügte. Dies ähnelt der Antwort von Keitn, mit dem Unterschied, dass kein Post-Build-Ereignis verwendet wird.
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
Ich wollte die web.config in meinem Projekt nicht aktualisieren, sondern nur die, die im bin-Ordner landet. Hier ist, wie ich es gemacht habe.
Fügen Sie am Ende von .csproj Folgendes hinzu (kurz vor dem endgültigen abschließenden Projekt-Tag)
<Target Name="Transform">
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>
Fügen Sie dann den folgenden Post-Build-Schritt hinzu
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
Dies bedeutet, dass beim Erstellen einer Transformation von der Debug- / Release-Konfiguration in die Datei WebsiteName.Config im Ausgabe-Bin-Verzeichnis die Haupt-web.config im Projekt nicht beeinträchtigt wird.
Nachdem ich viele ähnliche Beiträge gelesen hatte und Probleme mit Dateien hatte, die nicht überschrieben werden konnten oder auf die web.config nicht zugegriffen werden konnte, weil sie nur gelesen wurde, arbeitete ich für mich:
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
<TransformXml Source="$(ProjectDir)TempWeb.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
Anmerkungen:
Dies wird als BeforeBuild-Ziel ausgeführt.
Ich möchte nur, dass es unter einer bestimmten Konfiguration (einer alternativen Debug-Umgebung) ausgeführt wird, und deshalb habe ich die Bedingung. Bei der Bereitstellung über das Web wird das Veröffentlichungsziel aktiviert, und dieses Ziel muss nicht ausgeführt werden.
Ich möchte nicht daran denken müssen, web.config auszuchecken (nur um es rückgängig zu machen, wenn ich fertig bin), also checke ich web.config aus, bevor ich mit der Transformation beginne. Wenn Sie kein TFS verwenden, können Sie diese Zeile entfernen.
Da VS (2010) \ msbuild die Quelle web.config nicht loslassen möchte, verwende ich eine temporäre Datei (dank dieses Artikels für die Info: http://www.diaryofaninja.com/blog/2011/09/ 14 / using-custom-webconfig-transformations-in-msbuild )
Ich habe versucht, einen Befehl zum Löschen der Datei TempWeb.config hinzuzufügen, aber VS \ msbuild möchte ihn nicht loslassen. Ich kann damit leben, da es nicht zu TFS hinzugefügt wird.
The command ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\tf.exe" checkout "C:\_Code\RTS\SCTimeSheet\Web.config"" exited with code 9009
. Irgendwelche Ideen?
Ich weiß, dass dies alt ist, aber ich stehe vor dem gleichen Problem. Wir haben Test-, Staging- und Live-Konfigurationen, die Endpunkte, Verbindungszeichenfolgen usw. aus der Standard-Web.config ersetzen
Ich würde jedoch Folgendes tun:
Es sind nicht so viele Schritte und es ist ziemlich schnell erledigt, wenn Sie es verstehen. Hoffe das hilft. :) :)
@ologesa: Ihre Lösung benötigt Schreibzugriff auf die ursprüngliche Web.config (Sie müssen in TFS auschecken). Die bessere Lösung besteht darin, die Datei Web.config direkt im Ordner bin zu generieren, wie dies keitn tut. Wenn wir Keitns und Ihre Lösung kombinieren, erhalten wir diese:
<Target Name="BeforeBuild">
<Message Text="Transforming Web.config from Web.$(Configuration).config" Importance="high" />
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>