我最近更新到Visual Studio 2015并使用新的C#6.0功能.在VS中,一切都正确构建.
但是,我使用PSake作为构建脚本语言,并且构建总是在我使用c#6.0功能的地方失败.如何告诉psake使用MSBuild 14.0,以便正确构建新的c#6.0功能?
尝试和失败:
将框架版本传递给psake:未知的.NET Framework版本,4.6
在调用psake之前调用VS2015的vsvars32.bat.PSake仍然使用旧的MSBuild版本.
有没有办法使用PSAKE发布asp.net Web应用程序,就像visual studio一样?
我想将PowerShell与Psake和TeamCity配合使用来配置我的CI.我曾经使用标准的Msbuild运行程序,但现在我编写了自己的脚本来构建解决方案,但是当msbuild失败时我遇到了问题.
当我使用Msbuild runner并且构建失败时,然后在Overview页面上出现新的"Build errors"部分,我有来自msbuild的详细信息.但是当我编写自定义脚本时,我只得到错误"进程退出代码1",我不知道如何"创建"此构建错误部分.你知道怎么做吗?我知道我可以使用服务消息,但我无法处理来自msbuild的失败日志.
task compile {
try {
exec { msbuild $code_dir\SampleSolution.sln /t:Build /p:Configuration=Release }
} catch {
Write-Host $_ #only information that error occured, but without any msbui details
} }
Run Code Online (Sandbox Code Playgroud) Robocopy将以高于0的代码退出,但仍可能不是失败.PSake检测到0以上的任何内容为失败并且无法构建.这很好,但是为什么这仍然失败:
task Deploy {
robocopy $source $dest /NP /S /XO /NFL /NDL /NJH /NJS | Out-Default
if ($lastexitcode -eq 3)
{
Write-Host "Got Here"
$lastexitcode = 0
}
Write-Host "Deploy local complete"
Write-Host $lastexitcode
}
TaskTearDown {
if ($LastExitCode -ne 0) {
write-host "Build failed"
exit 1
}
}
Run Code Online (Sandbox Code Playgroud)
我可以验证Deploy if语句是否被命中,Write-Host输出0正确,但TaskTearDown仍然检测到最后一个退出代码为3!我该如何解决?
我想要的是一个我可以双击的文件,它将使用psake运行所需的构建过程.
我是psake和PowerShell的新手所以要温柔:-).
我现在有3个文件:
文件1:Build.bat
PowerShell -ExecutionPolicy Unrestricted -File .\Build.ps1 %1
Run Code Online (Sandbox Code Playgroud)
文件2:Build.ps1
Import-Module .\psake.psm1
Invoke-psake .\BuildTasks.ps1 $args
Run Code Online (Sandbox Code Playgroud)
文件3:BuildTasks.ps1
task default -depends Verify, Joe
task Verify {
write-host "hello from Verify!"
}
task Joe {
write-host "hello from Joe"
}
Run Code Online (Sandbox Code Playgroud)
无论如何将Build.ps1和BuildTasks.ps1合并到一个文件中?
我想将命令行参数注入到我的psake构建脚本中,如:.\ build.ps1 Deploy environment ="development"
但psake会将每个论点视为一个任务,并将回答"任务不存在"
是否可以在psake中注入命令行参数?
build.ps1 -->
Import-Module '.\psake.psm1'
Invoke-psake '.\tasks.ps1' $args
Remove-Module psake
Run Code Online (Sandbox Code Playgroud) 问题:我正在将TeamCity设置为ASP.NET MVC项目的构建服务器.我正在使用Powershell和psake对我们的.csproj文件运行msbuild并创建一个可部署的包.从构建服务器,我可以打开powershell,运行脚本,因为没有源代码更改,msbuild不会重新生成项目DLL文件.但是,当我从TeamCity Web界面调用完全相同的脚本时,即使没有任何更改,msbuild也会重建并重新生成DLL文件.不是它应该做的AFAIK.
我把这个问题缩小到一步.为了简单起见,我设置了我的TeamCity配置,因此它没有使用任何源代码控制,它运行一个调用我的PowerShell脚本的"powershell"构建步骤.
powershell脚本运行单个命令:
exec { &$msbuild $ProjectFile /t:Package "/p:PackageLocation=$PackageFile;OutDir=$TempPath;Configuration=$Config;SolutionDir=$BaseDir\Source\" /v:m }
Run Code Online (Sandbox Code Playgroud)
当我从powershell命令行手动调用脚本时,我看到:
CoreCompile:
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
Run Code Online (Sandbox Code Playgroud)
当我通过TeamCity调用完全相同的脚本时,我看到:
[11:11:26]: CoreCompile:
[11:11:26]: c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig ...
<SNIP>
[11:11:32]: CopyFilesToOutputDirectory:
[11:11:32]: Copying file from "obj\Demo\Website.Web.dll" to "d:\deploy\Build\package\Demo\temp\Website.Web.dll".
[11:11:32]: Website.Web -> d:\deploy\Build\package\Demo\temp\Website.Web.dll
[11:11:32]: Copying file from "obj\Demo\Website.Web.pdb" to "d:\deploy\Build\package\Demo\temp\Website.Web.pdb".
[11:11:32]: _CopyWebApplicationLegacy:
[11:11:32]: Copying Web Application Project Files for Website.Web
[11:11:32]: Copying file from "obj\Demo\Website.Web.dll" to "d:\deploy\Build\package\Demo\temp\_PublishedWebsites\Website.Web\bin\Website.Web.dll".
[11:11:32]: Copying file from …Run Code Online (Sandbox Code Playgroud) 在进行构建自动化时,我遇到了一个问题.随着Visual Studio 2013的升级,MSBuild的路径已按此处所述移动http://timrayburn.net/blog/visual-studio-2013-and-msbuild/
我已经更新了系统路径以指向msbuild的这个新位置.使用常规cmd提示msbuild解析就好了.但是在PowerShell中运行我的脚本,它似乎仍然拿起旧脚本,并显示链接中描述的问题.如何查看和更改powershell和psake从哪里获取msbuild,所以我可以指向预期的版本?
使用psake 4.5.0我试着运行我的default.ps1文件很多不同的方法,同时传递-properties和-parameters,但这些值只是忽略在根范围中的.ps1-script.
执行relative(在子文件夹中使用psake):
.\psake-4.5.0\psake.ps1 .\default.ps1 BuildSolution -properties @{"a"="a";"b"="b";"c"="c";"d"="d"} -parameters @{"w"="w";"x"="x";"y"="y";"z"="z"}
Run Code Online (Sandbox Code Playgroud)
使用导入的模块执行:
Import-Module .\psake-4.5.0\psake.psm1
Invoke-Psake .\default.ps1 BuildSolution -properties @{"a"="a";"b"="b";"c"="c";"d"="d"} -parameters @{"w"="w";"x"="x";"y"="y";"z"="z"}
Run Code Online (Sandbox Code Playgroud)
通过安装的Chocolatey-package执行:
psake .\default.ps1 BuildSolution -properties "@{'a'='a';'b'='b';'c'='c';'d'='d'}" -parameters "@{'w'='w';'x'='x';'y'='y';'z'='z'}"
Run Code Online (Sandbox Code Playgroud)
执行cmd.exe:
psake-4.5.0\psake.cmd default.ps1 BuildSolution -properties "@{'a'='a';'b'='b';'c'='c';'d'='d'}" -parameters "@{'w'='w';'x'='x';'y'='y';'z'='z'}"
Run Code Online (Sandbox Code Playgroud)
现在,default.ps1只是调试所有这些值:
// Since "properties" doesn't get populated, I also try "Param"
Param(
$w = $w, // Trying to populate from passed param
$x …Run Code Online (Sandbox Code Playgroud) psake ×10
powershell ×6
msbuild ×3
build ×2
asp.net ×1
asp.net-mvc ×1
batch-file ×1
c#-6.0 ×1
publish ×1
robocopy ×1
scripting ×1
teamcity ×1
teamcity-7.1 ×1