forked from davidfowl/NuGetPowerTools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMSBuild.psm1
121 lines (104 loc) · 3.66 KB
/
MSBuild.psm1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
function Resolve-ProjectName {
param(
[parameter(ValueFromPipelineByPropertyName = $true)]
[string[]]$ProjectName
)
if($ProjectName) {
$projects = Get-Project $ProjectName
}
else {
# All projects by default
$projects = Get-Project
}
$projects
}
function Get-MSBuildProject {
param(
[parameter(ValueFromPipelineByPropertyName = $true)]
[string[]]$ProjectName
)
Process {
(Resolve-ProjectName $ProjectName) | % {
$path = $_.FullName
@([Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($path))[0]
}
}
}
function Add-Import {
param(
[parameter(Position = 0, Mandatory = $true)]
[string]$Path,
[parameter(Position = 1, ValueFromPipelineByPropertyName = $true)]
[string[]]$ProjectName
)
Process {
(Resolve-ProjectName $ProjectName) | %{
$buildProject = $_ | Get-MSBuildProject
$buildProject.Xml.AddImport($Path)
$_.Save()
}
}
}
function Set-MSBuildProperty {
param(
[parameter(Position = 0, Mandatory = $true)]
$PropertyName,
[parameter(Position = 1, Mandatory = $true)]
$PropertyValue,
[parameter(Position = 2, ValueFromPipelineByPropertyName = $true)]
[string[]]$ProjectName
)
Process {
(Resolve-ProjectName $ProjectName) | %{
$buildProject = $_ | Get-MSBuildProject
$buildProject.SetProperty($PropertyName, $PropertyValue) | Out-Null
$_.Save()
}
}
}
function Get-MSBuildProperty {
param(
[parameter(Position = 0, Mandatory = $true)]
$PropertyName,
[parameter(Position = 2, ValueFromPipelineByPropertyName = $true)]
[string]$ProjectName
)
$buildProject = Get-MSBuildProject $ProjectName
$buildProject.GetProperty($PropertyName)
}
function Add-SolutionDirProperty {
param(
[parameter(ValueFromPipelineByPropertyName = $true)]
[string[]]$ProjectName
)
(Resolve-ProjectName $ProjectName) | %{
$buildProject = $_ | Get-MSBuildProject
if(!($buildProject.Xml.Properties | ?{ $_.Name -eq 'SolutionDir' })) {
# Get the relative path to the solution
$relativeSolutionPath = [NuGet.PathUtility]::GetRelativePath($_.FullName, $dte.Solution.Properties.Item("Path").Value)
$relativeSolutionPath = [IO.Path]::GetDirectoryName($relativeSolutionPath)
$relativeSolutionPath = [NuGet.PathUtility]::EnsureTrailingSlash($relativeSolutionPath)
$solutionDirProperty = $buildProject.Xml.AddProperty("SolutionDir", $relativeSolutionPath)
$solutionDirProperty.Condition = '$(SolutionDir) == '''' Or $(SolutionDir) == ''*Undefined*'''
$_.Save()
}
}
}
'Set-MSBuildProperty', 'Add-SolutionDirProperty', 'Add-Import','Add-SolutionDirProperty' | %{
Register-TabExpansion $_ @{
ProjectName = { Get-Project -All | Select -ExpandProperty Name }
}
}
Register-TabExpansion 'Get-MSBuildProperty' @{
ProjectName = { Get-Project -All | Select -ExpandProperty Name }
PropertyName = {param($context)
if($context.ProjectName) {
$buildProject = Get-MSBuildProject $context.ProjectName
}
if(!$buildProject) {
$buildProject = Get-MSBuildProject
}
$buildProject.Xml.Properties | Sort Name | Select -ExpandProperty Name -Unique
}
}
Export-ModuleMember Get-MSBuildProject, Add-SolutionDirProperty, Add-Import, Get-MSBuildProperty, Set-MSBuildProperty