После построения выполнить в PowerShell
можно ли настроить проект .net с событием post build для выполнения сценария powershell? Я использую этот скрипт для создания некоторых файлов. Также я могу передать, является ли это отладкой или выпуском сборки скрипта. Пример этого был бы замечательным.
6 ответов:
вот пример :
в первую очередь : вы должны знать о том, что PowerShell необходимо настроить для выполнения сценариев. Следующая строка позволяет PowerShell выполнять сценарии:
Set-ExecutionPolicy RemoteSignedОсобое упоминание здесь : если вы используете 64-битную систему, вы должны позаботиться о том, что 'devenv.exe' исполняемый файл Visual Studio 2010-это 32bits exe, поэтому вам нужно разрешить выполнение PowerShell 32 файлы сценариев.
после того, как здесь вы можете перейти в свой проект свойства и настроить post build, как показано здесь под (извините на французском языке):
например :
вот файл '
psbuild.ps1' создает 'test.txt' в целевом пути с именем конфигурации внутри. Я помещаю в комментарий различные способы отладки вашего сценария postbuild (окно сообщения, звук, сообщение на выходе)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
установить-ExecutePolicy, временное установить политику выполнения в рамках текущей сессии. Если вы установите это в powershell и запустите команду post build в vs, вы все равно не получите разрешения. Поэтому сначала установите, чем запустить сценарий ps1, как показано ниже
powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)
перед вызовом сценария power-shell из visual studio установите для ExecutionPolicy значение unrestricted from power-shell window следующим образом...
Set-ExecutionPolicy -Scope CurrentUser; ExecutionPolicy: unrestricted;затем вызовите сценарий power-shell следующим образом...
(не нужно проходить полный " powershell.exe-файла" путь к файлу)
powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)тогда в скрипте, вы всегда можете прочитать параметр, как это...
param([string]$SolutionDir, [string]$ProjectPath); #Write-Host ($SolutionDir +" Call this script with following aruments"); #Write-Host ($ProjectPath +" Call this script with following aruments");
вместо того, чтобы возиться с общесистемными настройками и различать 32 и 64-разрядные среды, намного проще и надежнее подход заключается в указании
ExecutionPolicyв вызове PowerShell, следующим образом: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обратите внимание, в приведенном выше коде, как вызов
Get-ExecutionPolicyпоказывает текущий режим. Также обратите внимание, как этот режим задается в самом вызове PowerShell, который может быть объединен с именем скрипта:test. ps1 содержание:
echo ('The current policy is ' + (Get-ExecutionPolicy)).ToString()вызов test. ps1 с
Unrestrictedполитика в системе с отключенными сценариями:C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1 The current policy is Unrestrictedтакже обратите внимание, что приведенный выше вызов делает не требуются права администратора, поэтому его можно вызвать на этапе предварительной сборки Visual Studio или аналогичном.
Я сделал это с помощью команды ниже в команде post-build even:
PowerShell -NoProfile -ExecutionPolicy unrestricted -file $(SolutionDir)AutomationScript\DBAutomationScript.ps1 -target $(SolutionDir)MUFG.SECMOD.Data\SqlScripts -generatedFileName $(SolutionDir)MUFG.SECMOD.Data\SqlScripts\DeploymentDBScript.sqldbautomationscript. ps1 содержание:
param ([string]$target, [string]$generatedFileName)


