Post生成事件执行PowerShell
是否有可能build立一个.net项目后生成事件执行PowerShell脚本? 我正在使用这个脚本来生成一些文件。 我也可以通过无论是debugging或发布构build脚本。 这个例子会很好。
这里是一个例子:
首先 :您必须了解必须configurationPowerShell才能执行脚本的事实。 以下行允许PowerShell执行脚本:
Set-ExecutionPolicy RemoteSigned
这里要特别提一下 :如果你正在运行一个64位的系统,你必须注意一个事实,即“devenv.exe ”,Visual Studio 2010可执行文件是一个32位的exe文件,所以你需要允许PowerShell 32执行脚本。
一旦在这里,你可以进入你的项目属性,并configuration后的构build如下所示(对不起,法语):
例如 :
这里是文件“ psbuild.ps1
”,它在里面的configuration名称的目标path中创build一个“ test.txt
”。 我提出了不同的方法来debugging你的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
我没有一个例子,但是这里有一些你可能会觉得有用的链接:
- PostBuild中的PowerShell脚本
- 调用PowerShell脚本后build与参数
- Re:从生成后的事件中运行PowerShell忽略ExecutionPolicy
- 为Visual Studio项目创buildPowershell预构build和后构build事件
而不是搞乱系统范围的设置,不得不区分32位和64位环境,更简单和更可靠的方法是在PowerShell调用中指定ExecutionPolicy
,如下所示:
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()
在禁用脚本的系统上使用Unrestricted
策略调用test.ps1:
C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1 The current policy is Unrestricted
还要注意,上面的调用不需要pipe理员权限,所以可以在Visual Studio的预生成步骤或类似的地方调用它。
命令Set-ExecutePolicy,当前会话下的临时集执行策略。 如果你在PowerShell中设置它,并运行后生成命令,你仍然不会被允许。 所以首先设置比运行你的ps1脚本像波纹pipe
powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)
在从Visual Studio调用Power-shell脚本之前,请将ExecutionPolicy设置为不受限制,像这样…
Set-ExecutionPolicy -Scope CurrentUser; ExecutionPolicy: unrestricted;
以下列方式调用power-shell脚本…
(不需要传递完整的“powershell.exe”文件path)
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");