Skip to content

Commit

Permalink
Start of adding -debugMode to Invoke-MSBuild. Related to #15.
Browse files Browse the repository at this point in the history
  • Loading branch information
sayedihashimi committed Feb 2, 2014
1 parent 3aea847 commit e34f8b3
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 4 deletions.
81 changes: 79 additions & 2 deletions src/psbuild.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,10 @@ function Invoke-MSBuild{
$consoleLoggerParams = $global:PSBuildSettings.DefaultClp,

[string]
$extraArgs
$extraArgs,

[switch]
$debugMode
)

begin{
Expand Down Expand Up @@ -308,9 +311,83 @@ function Invoke-MSBuild{
"Calling msbuild.exe with the following args: {0}" -f ($msbuildArgs -join ' ') | Write-BuildMessage

if($pscmdlet.ShouldProcess("`n`tmsbuild.exe {0}" -f ($msbuildArgs -join ' '))){
& ((Get-MSBuild).FullName) $msbuildArgs

if(-not $debugMode){
& ((Get-MSBuild).FullName) $msbuildArgs
}
else{
# in debug mode we call msbuild using the APIs
Add-Type -AssemblyName Microsoft.Build
$globalProps = (PSBuild-ConverToDictionary -valueToConvert $properties)
$pc = (New-Object -TypeName Microsoft.Build.Evaluation.ProjectCollection)

$projectObj = $pc.LoadProject($project)
# todo: add loggers
$projectInstance = $projectObj.CreateProjectInstance()

$brdArgs = @($projectInstance, ([string[]](@()+$targets)), [Microsoft.Build.Execution.HostServices]$null, [Microsoft.Build.Execution.BuildRequestDataFlags]::ProvideProjectStateAfterBuild)
$brd = New-Object -TypeName Microsoft.Build.Execution.BuildRequestData -ArgumentList $brdArgs

$buildResult = [Microsoft.Build.Execution.BuildManager]::DefaultBuildManager.Build(
(New-Object -TypeName Microsoft.Build.Execution.BuildParameters -ArgumentList $pc),
$brd)
$psbuildResult = New-PSBuildResult -buildResult $buildResult -projectInstance $projectInstance

return $psbuildResult
}
}
}
}
}

function New-PSBuildResult{
[cmdletbinding()]
param(
[Parameter(
Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[Microsoft.Build.Execution.BuildResult]
$buildResult,

[Parameter(
Mandatory=$true,
ValueFromPipelineByPropertyName=$true)]
[Microsoft.Build.Execution.ProjectInstance]
$projectInstance
)
begin{
Add-Type -AssemblyName Microsoft.Build
}
process{
$result = New-Object PSObject -Property @{
BuildResult = $buildResult

ProjectInstance = $projectInstance
}

return $result
}
}

function PSBuild-ConverToDictionary{
[cmdletbinding()]
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true)]
[hashtable]
$valueToConvert
)
process{
$valueToReturn = New-Object 'system.collections.generic.dictionary[[string],[string]]'

if($valueToConvert){
$valueToConvert.Keys | ForEach-Object {
$valueToReturn.Add($_, ($valueToConvert[$_]))
}
}

return $valueToReturn
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/test.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ else{
# Invoke-MSBuild C:\temp\msbuild\path.proj -properties (@{'foo'='bar';'visualstudioversion'='12.0'}) -extraArgs '/p:foo2=bar2'
#Find-Import C:\temp\msbuild\proj1.proj -labelValue 'SlowCheetah'

#$projFile = 'C:\temp\msbuild\new\new.proj'
#$projFile = 'C:\temp\msbuild\temp.proj'
#$defProps = 'C:\temp\msbuild\defProps\defProps.proj'
#[environment]::SetEnvironmentVariable("test","orig")

#Invoke-MSBuild $defProps -defaultProperties @{'test'='over'}
#$bResult = Invoke-MSBuild $projFile -debugMode
#$proj = (Get-Project $projFile)

#Invoke-MSBuild -projectsToBuild C:\temp\msbuild\new\new.proj
Expand Down

0 comments on commit e34f8b3

Please sign in to comment.