使用psake构建C#.NET 3.5项目失败但是使用msbuild成功

时间:2013-07-11 13:12:11

标签: deployment msbuild .net-3.5 psake

我正在尝试使用psake为.NET 3.5中的公司C#项目创建构建脚本,但是当我运行它时,它会失败并出现错误

default parameter specifiers are not permitted

我谷歌了,看起来这是.NET 3.5的一个问题,它不允许在函数中使用默认参数。

然而奇怪的是,使用msbuild.exe构建的同一个项目已经成功。我试图将psake的$ framework变量设置为'3.5x86'和'3.5x64',但这些都没有帮助。

你知道psake有什么问题,或者是否有一个我丢失的秘密变量?

我的psake脚本:

$scriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent

$framework = '3.5x86'

$serverSln = $scriptDir+'\..\Server\Server.sln'
$clientSln = $scriptDir+'\..\Client\Client.sln'
$outDirServer = $scriptDir+'\..\Binaries\Server'
$outDirClient = $scriptDir+'\..\Binaries\Client'


task default -depends Full
task Full -depends Clean, BuildServer, BuildClient #, BuildAccs, DeployRelease

task BuildServer {
  #Framework '3.5'
  exec { msbuild $serverSln /t:Build /p:Configuration=Release /v:quiet }
}

task BuildClient {

  #Framework '3.5'
  exec { msbuild $clientSln /t:Build /p:Configuration=Deploy /v:quiet }
  exec { msbuild $clientSln /t:Build /p:Configuration=Release /v:quiet }
}

task Clean {
  Write-Host Cleaning

  if (Test-Path $outDirClient) 
    {   
        rd $outDirClient -rec -force | out-null
    }

  if (Test-Path $outDirServer) 
    {   
        rd $outDirServer -rec -force | out-null
    }
}

脚本输出:

$scriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent

$framework = '3.5x86'

$serverSln = $scriptDir+'\..\Server\Server.sln'
$clientSln = $scriptDir+'\..\Client\Client.sln'
$outDirServer = $scriptDir+'\..\Binaries\Server'
$outDirClient = $scriptDir+'\..\Binaries\Client'


task default -depends Full
task Full -depends Clean, BuildServer, BuildClient #, BuildAccs, DeployRelease

task BuildServer {
  #Framework '3.5'
  exec { msbuild $serverSln /t:Build /p:Configuration=Release /v:quiet }
}

task BuildClient {

  #Framework '3.5'
  exec { msbuild $clientSln /t:Build /p:Configuration=Deploy /v:quiet }
  exec { msbuild $clientSln /t:Build /p:Configuration=Release /v:quiet }
}

task Clean {
  Write-Host Cleaning

  if (Test-Path $outDirClient) 
    {   
        rd $outDirClient -rec -force | out-null
    }

  if (Test-Path $outDirServer) 
    {   
        rd $outDirServer -rec -force | out-null
    }
}

2 个答案:

答案 0 :(得分:0)

$framework变量在最新版本中已弃用,您应该使用framework函数。但它显然不起作用。它看起来像是PSake中的一个错误。

答案 1 :(得分:0)

我终于在键盘和椅子之间发现了一个错误。删除由.NET 4.0创建的项目的obj文件后,MSBuild.exe在同一错误上保持失败。因此psake中没有错误,它仍然很棒:)