Ist es möglich, ein .NET-Projekt mit einem Post-Build-Ereignis einzurichten, um ein Powershell-Skript auszuführen? Ich verwende dieses Skript, um einige Dateien zu generieren.
Kann ich auch übergeben, ob es sich um ein Debug- oder Release-Build für ein Skript handelt? Ein Beispiel dafür wäre großartig.
c#
.net
powershell
msbuild
Amateur
quelle
quelle
Antworten:
Hier ist ein Beispiel :
Zunächst einmal : Sie müssen sich der Tatsache bewusst sein, dass PowerShell für die Ausführung von Skripten konfiguriert sein muss. In der folgenden Zeile kann PowerShell Skripts ausführen:
Besondere Erwähnung hier : Wenn Sie ein 64-Bit-System ausführen, müssen Sie darauf achten, dass 'devenv.exe ' die ausführbare Datei von Visual Studio 2010 eine 32-Bit-Exe ist. Daher müssen Sie PowerShell 32 erlauben, Skripts auszuführen.
Sobald Sie hier sind, können Sie in Ihre Projekteigenschaften gehen und den Post-Build wie hier unter (sorry auf Französisch) gezeigt konfigurieren:
Zum Beispiel :
Hier ist die Datei '
psbuild.ps1
', sie erstellt ein 'test.txt
' im Zielpfad mit dem darin enthaltenen Konfigurationsnamen. Ich habe verschiedene Möglichkeiten zum Debuggen Ihres Postbuild-Skripts kommentiert (Meldungsfeld, Sound, Meldung in der Ausgabe).quelle
Der Befehl Set-ExecutePolicy legt die Ausführungsrichtlinie für die aktuelle Sitzung vorübergehend fest. Wenn Sie dies in Powershell einstellen und den Befehl post build in vs ausführen, werden Sie immer noch nicht zugelassen. Stellen Sie also zuerst ein und führen Sie dann Ihr ps1-Skript wie unten aus
quelle
Anstatt mit systemweiten Einstellungen herumzuspielen und zwischen 32- und 64-Bit-Umgebungen unterscheiden zu müssen, ist es viel einfacher und zuverlässiger , die
ExecutionPolicy
beim Aufruf von PowerShell wie folgt anzugeben :Beachten Sie im obigen Code, wie der Aufruf
Get-ExecutionPolicy
Ihnen den aktuellen Modus anzeigt. Beachten Sie auch, wie dieser Modus im Aufruf von PowerShell selbst angegeben wird, der mit einem Skriptdateinamen kombiniert werden kann:test.ps1 Inhalt:
Aufruf von test.ps1 mit
Unrestricted
Richtlinie auf einem System mit deaktivierten Skripten:Beachten Sie auch , dass der obige Aufruf nicht nicht benötigen Administratorrechte, so kann es in Visual Studio Pre-Build - Schritt oder ähnlich bezeichnet werden.
quelle
Stellen Sie die ExecutionPolicy vor dem Aufrufen des Power-Shell-Skripts aus Visual Studio
RemoteSigned
wie folgt auf Power-Shell-Fenster ein ...Rufen Sie dann das Powershell-Skript folgendermaßen auf ...
(Keine Notwendigkeit, den vollständigen Dateipfad "Powershell.exe" zu übergeben)
dann können Sie im Skript den Parameter immer so lesen ...
quelle
Ich habe es mit dem folgenden Befehl im Post-Build-Even-Befehl gemacht:
Inhalt von DBAutomationScript.ps1:
quelle