¿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 RemoteSigned
Menció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 -Force
fuente
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
ExecutionPolicy
en 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 RemoteSigned
Tenga en cuenta en el código anterior cómo llamar
Get-ExecutionPolicy
le 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
Unrestricted
política en un sistema que tiene scripts deshabilitados:C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1 The current policy is Unrestricted
Tambié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
RemoteSigned
desde 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.sql
Contenido de DBAutomationScript.ps1:
param ([string]$target, [string]$generatedFileName)
fuente