【发布时间】:2015-02-13 00:33:57
【问题描述】:
我正在尝试为 NuGet 包创建一个 Init.ps1 脚本,该脚本将项目添加到解决方案文件夹中,该文件夹可能已经存在也可能不存在于解决方案中。
脚本成功添加或替换文件系统中的文件,如果没有这样的解决方案文件夹,则将项目成功添加到新创建的解决方案文件夹中,但是,如果解决方案文件夹已经存在,则名为 NewFolder1 的新解决方案文件夹(或 2 及以上,如果已经存在)被创建,并且没有文件被添加到解决方案中。
param($installPath, $toolsPath, $package)
$solutionNode = Get-Interface $dte.Solution ([EnvDTE80.Solution2])
$solutionItemsNode = $solutionNode.FindProjectItem("FolderName")
$solutionItemsProjectItems = Get-Interface $solutionNode.ProjectItems ([EnvDTE.ProjectItems])
if (!$solutionItemsProjectItems) {
$solutionItemsNode = $solutionNode.AddSolutionFolder("FolderName")
$solutionItemsProjectItems = Get-Interface $solutionItemsNode.ProjectItems ([EnvDTE.ProjectItems])
}
$rootDir = (Get-Item $installPath).parent.parent.fullname
$deploySource = join-path $installPath '\sln\'
$deployTarget = join-path $rootDir '\FolderName\'
New-Item -ItemType Directory -Force -Path $deployTarget
ls $deploySource | foreach-object {
$targetFile = join-path $deployTarget $_.Name
Copy-Item $_.FullName $targetFile -Recurse -Force
$solutionItemsProjectItems.AddFromFile($targetFile) > $null
} > $null
我尝试了各种更改,例如检查$solutionItemsNode 而不是$solutionItemsProjectItems(效果相同),直接添加到解决方案而不是解决方案文件夹下(什么也没做)以及以下更改与原始更改相同:
$solutionItemsNode = $solution.Projects | where-object { $_.ProjectName -eq "FolderName" } | select -first 1
if (!$solutionItemsNode) {
$solutionItemsNode = $solutionNode.AddSolutionFolder("FolderName")
}
有什么指点吗?
相关问答和 MSDN 链接:
【问题讨论】:
标签: visual-studio powershell nuget envdte