Post生成事件执行PowerShell

是否有可能build立一个.net项目后生成事件执行PowerShell脚本? 我正在使用这个脚本来生成一些文件。 我也可以通过无论是debugging或发布构build脚本。 这个例子会很好。

这里是一个例子:

首先 :您必须了解必须configurationPowerShell才能执行脚本的事实。 以下行允许PowerShell执行脚本:

Set-ExecutionPolicy RemoteSigned 

这里要特别提一下 :如果你正在运行一个64位的系统,你必须注意一个事实,即“devenv.exe ”,Visual Studio 2010可执行文件是一个32位的exe文件,所以你需要允许PowerShell 32执行脚本。

一旦在这里,你可以进入你的项目属性,并configuration后的构build如下所示(对不起,法语):

在VS 2010中发布

例如 :

带有PowerShell的postbuild示例

这里是文件“ 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");