function Get-Template($url, $dir, $username, $password, $asyncSetters) { $lib = Resolve-Path -Path "$($PSScriptRoot)\..\lib\netstandard2.0\Esiur.dll" #write-host "Lib is at $($lib)" $assembly = [Reflection.Assembly]::LoadFile($lib) $tempPath = [Esiur.Proxy.TemplateGenerator]::GetTemplate($url, $dir, true, $username,$password, $asyncSetters); $startupProject = GetStartupProject $activeConfiguration = $startupProject.ConfigurationManager.ActiveConfiguration if ($activeConfiguration -eq $null) { throw "Unable to read project configuration settings of project '$($startupProject.ProjectName)' for the " + 'active solution configuration. Try closing Package Manager Console and restarting Visual Studio. If the ' + 'problem persists, use Help > Send Feedback > Report a Problem.' } $startupProject.ProjectItems.AddFromDirectory($tempPath) | Out-Null } function GetStartupProject($name, $fallbackProject) { if ($name) { return Get-Project $name } $startupProjectPaths = $DTE.Solution.SolutionBuild.StartupProjects if ($startupProjectPaths) { if ($startupProjectPaths.Length -eq 1) { $startupProjectPath = $startupProjectPaths[0] if (![IO.Path]::IsPathRooted($startupProjectPath)) { $solutionPath = Split-Path (GetProperty $DTE.Solution.Properties 'Path') $startupProjectPath = [IO.Path]::GetFullPath((Join-Path $solutionPath $startupProjectPath)) } $startupProject = GetSolutionProjects | ?{ try { $fullName = $_.FullName } catch [NotImplementedException] { return $false } if ($fullName -and $fullName.EndsWith('\')) { $fullName = $fullName.Substring(0, $fullName.Length - 1) } return $fullName -eq $startupProjectPath } if ($startupProject) { return $startupProject } Write-Warning "Unable to resolve startup project '$startupProjectPath'." } else { Write-Warning 'Multiple startup projects set.' } } else { Write-Warning 'No startup project set.' } Write-Warning "Using project '$($fallbackProject.ProjectName)' as the startup project." return $fallbackProject } function GetProperty($properties, $propertyName) { try { return $properties.Item($propertyName).Value } catch { return $null } } function GetSolutionProjects() { $projects = New-Object 'System.Collections.Stack' $DTE.Solution.Projects | %{ $projects.Push($_) } while ($projects.Count) { $project = $projects.Pop(); <# yield return #> $project if ($project.ProjectItems) { $project.ProjectItems | ?{ $_.SubProject } | %{ $projects.Push($_.SubProject) } } } }