¿Es posible configurar un proyecto .NET con un evento posterior a la compilación para ejecutar un script de PowerShell? Estoy usando este script para generar algunos archivos.
También puedo pasar si se trata de una compilación de depuración o versión de script. Un ejemplo de esto sería genial.
c#
.net
powershell
msbuild
aficionado
fuente
fuente

Respuestas:
Aquí hay un ejemplo :
En primer lugar : debe tener en cuenta el hecho de que PowerShell debe estar configurado para ejecutar scripts. La siguiente línea permite a PowerShell ejecutar scripts:
Set-ExecutionPolicy RemoteSignedMención especial aquí : si está ejecutando un sistema de 64 bits, debe ocuparse del hecho de que 'devenv.exe ', el ejecutable de Visual Studio 2010 es un exe de 32 bits, por lo que debe permitir que PowerShell 32 ejecute scripts.
Una vez aquí, puede ir a las propiedades de su proyecto y configurar la compilación posterior como se muestra aquí en (lo siento en francés):
Por ejemplo :
Aquí está el archivo "
psbuild.ps1", crea un "test.txt" en la ruta de destino con el nombre de configuración dentro. Puse en el comentario diferentes formas de depurar su script de postbuild (cuadro de mensaje, sonido, mensaje en la salida)param ([string]$config, [string]$target) #[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") #[void][System.Windows.Forms.MessageBox]::Show("It works.") #[Console]::Beep(600, 800) #Write-Host 'coucou' set-content $target -Value $config -Forcefuente
El comando Set-ExecutePolicy establecerá temporalmente la política de ejecución en la sesión actual. Si configura esto en powershell y ejecuta el comando de compilación posterior en vs, aún no se le permitirá. Así que configure primero y luego ejecute su script ps1 como se muestra a continuación
fuente
En lugar de jugar con la configuración de todo el sistema y tener que diferenciar entre entornos de 32 y 64 bits, un enfoque mucho más fácil y confiable es especificar el
ExecutionPolicyen la llamada a PowerShell, de la siguiente manera:C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted PS C:\Users\xyz> Get-ExecutionPolicy Unrestricted PS C:\Users\xyz> exit C:\Users\xyz>PowerShell -ExecutionPolicy RemoteSigned PS C:\Users\xyz> Get-ExecutionPolicy RemoteSignedTenga en cuenta en el código anterior cómo llamar
Get-ExecutionPolicyle indican el modo actual. También tenga en cuenta cómo se especifica este modo en la llamada a PowerShell, que se puede combinar con un nombre de archivo de script:contenido de test.ps1:
echo ('The current policy is ' + (Get-ExecutionPolicy)).ToString()Llamar a test.ps1 con
Unrestrictedpolítica en un sistema que tiene scripts deshabilitados:C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1 The current policy is UnrestrictedTambién tenga en cuenta que la llamada anterior no requiere derechos de administrador, por lo que se puede llamar en el paso previo a la compilación de Visual Studio o similar.
fuente
Antes de llamar al script de power-shell desde Visual Studio, configure ExecutionPolicy en
RemoteSigneddesde la ventana de Power-Shell de esta manera ...Set-ExecutionPolicy -Scope CurrentUser; ExecutionPolicy: RemoteSigned;luego llame al script de powershell de la siguiente manera ...
(no es necesario pasar la ruta completa del archivo "powershell.exe")
luego, en el script, siempre puede leer el parámetro así ...
param([string]$SolutionDir, [string]$ProjectPath); #Write-Host ($SolutionDir +" Call this script with following aruments"); #Write-Host ($ProjectPath +" Call this script with following aruments");fuente
Lo hice con el siguiente comando en el comando incluso posterior a la compilación:
PowerShell -NoProfile -ExecutionPolicy unrestricted -file $(SolutionDir)AutomationScript\DBAutomationScript.ps1 -target $(SolutionDir)MUFG.SECMOD.Data\SqlScripts -generatedFileName $(SolutionDir)MUFG.SECMOD.Data\SqlScripts\DeploymentDBScript.sqlContenido de DBAutomationScript.ps1:
param ([string]$target, [string]$generatedFileName)fuente