Возможно ли создать проект .net с событием post build для запуска powershell script? Я использую этот script для создания некоторых файлов. Также могу передать, будет ли это отладка или релиз сборки до script. Примером этого было бы здорово.
Событие post build execute powershell
Ответ 1
Вот пример:
Прежде всего: вы должны знать о том, что PowerShell должен быть настроен для выполнения сценариев. Следующая строка позволяет PowerShell выполнять сценарии:
Set-ExecutionPolicy RemoteSigned
Особое упоминание здесь: если вы используете 64-битную систему, вам нужно позаботиться о том, что "devenv.exe" исполняемый файл Visual Studio 2010 представляет собой 32-битный exe, поэтому вам нужно чтобы PowerShell 32 выполнял сценарии.
После этого вы можете войти в свои свойства проекта и настроить пост-сборку, как показано ниже (извините на французском):
Например:
Вот файл 'psbuild.ps1
', он создает "test.txt
" в целевом пути с именем конфигурации внутри. Я добавил несколько комментариев для отладки вашего postbuild script (окно сообщения, звук, сообщение на выходе)
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
Ответ 2
У меня нет примера, но вот некоторые ссылки, которые могут вам пригодиться:
Ответ 3
Вместо того, чтобы возиться с общесистемными настройками и иметь возможность различать между 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, который может быть объединен с именем script filename:
Содержимое 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 Pre-Build Step или аналогичном.
Ответ 4
команда Set-ExecutePolicy, временная политика выполнения набора в текущем сеансе. Если вы установите это в powershell и выполните команду post build в vs, вы все равно получите недопустимое значение. Поэтому установите сначала, чем запустите свой ps1 script, как показано ниже.
powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)
Ответ 5
Перед вызовом power-shell script из visual studio установите ExecutionPolicy неограниченно из окна командной оболочки, как это...
Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: unrestricted;
оболочка вызова script следующим образом...
(не нужно передавать полный путь "powershell.exe" )
powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)
то в script вы всегда можете прочитать параметр, подобный этому...
param([string]$SolutionDir,
[string]$ProjectPath);
#Write-Host ($SolutionDir +" Call this script with following aruments");
#Write-Host ($ProjectPath +" Call this script with following aruments");