Eri*_*ver 5 msbuild powershell visual-studio
任何人都知道任何好的MSBuild任务将执行PowerShell脚本并传递不同的参数?
我能够找到B#.NET博客:从MSBuild调用PowerShell脚本,但我希望有一些更精致的东西.
如果我找不到任何东西,我当然会继续使用该博客作为首发来磨练自己.
可以使用http://powershellmsbuild.codeplex.com/获取3.5.如果有一个NuGet包可以通过NuGet包恢复来利用它会很好.
4.0具有的Windows PowerShell任务工厂这你可以在代码库已经被整合进
MSBuild扩展包(首要任务库之一- 400+任务和里面的MSBuild推荐)已经PowerShellTaskFactory(从下载的帮助文件的下载部分这个示例版本有一个偷看).
我发布了重复的问题和答案,供后代在投票结束时使用。关键的区别在于,这个问题仅限于OOTB,而我的自我回答则保持在该限制范围内。
Powershell 似乎没有一种简单的方法可以使用任意命令触发它,然后以与非 PowerShell 的调用者正确互操作的方式冒泡解析和执行错误 - 例如,cmd.exeTeamCity等。
我的问题很简单。对我来说,使用 OOTB MSBuild v4 和 PowerShell v3 的最佳方法是什么(接受建议 - 不会排除适合生产的 MSBuild 任务,但它需要比建议“这很容易 - 获取 PowerShell 任务工厂示例并调整它和/或成为它的维护者/父级”)来运行命令(小脚本段,或(最常见的)脚本调用.ps1。
我认为这应该是正常的事情,例如:
<Exec
IgnoreStandardErrorWarningFormat="true"
Command="PowerShell "$(ThingToDo)"" />
Run Code Online (Sandbox Code Playgroud)
遗憾的是这不起作用:-
ThingToDo解析失败,它会默默地失败ThingToDo是不存在的脚本调用,则失败ERRORLEVEL基于.cmd结果的结果,它会变得很麻烦"在 中嵌入引号ThingToDo,这是行不通的那么,从 MSBuild 运行 PowerShell 的防弹方式应该是什么?有什么我可以PsGet来让一切正常吗?
Weeeeelll,你可以使用这样的冗长的东西,直到你找到更好的方法:-
<PropertyGroup>
<__PsInvokeCommand>powershell "Invoke-Command</__PsInvokeCommand>
<__BlockBegin>-ScriptBlock { $errorActionPreference='Stop';</__BlockBegin>
<__BlockEnd>; exit $LASTEXITCODE }</__BlockEnd>
<_PsCmdStart>$(__PsInvokeCommand) $(__BlockBegin)</_PsCmdStart>
<_PsCmdEnd>$(__BlockEnd)"</_PsCmdEnd>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
然后你需要做的就是:
<Exec
IgnoreStandardErrorWarningFormat="true"
Command="$(_PsCmdStart)$(ThingToDo)$(_PsCmdEnd)" />
Run Code Online (Sandbox Code Playgroud)
它的唯一可取之处(除了捕获我能想到的所有错误类型之外)是它可以与任何 PowerShell 版本和任何 MSBuild 版本一起 OOTB 工作。
我去拿我的外套。
| 归档时间: |
|
| 查看次数: |
6338 次 |
| 最近记录: |