UPDATED ANSWER:所以我想我应该已经在我的问题上更具体一些,并声明我正在寻找在我的Nuget PowerShell安装文件(install.ps1)中的Visual Studio对象模型的帮助。上面选定的答案明确指出了我的正确方向,并且非常有帮助。
这个答案还有一个额外的好处,即包括一个关于VS“神奇地”知道我在做什么的VS的回避评论。下次我将提供关于我对VS项目文件理解的更多细节,以及我实际上在寻找有关如何在VS对象模型中移动文件以避免我得到的错误的信息的清晰度。但是我离题了。下面是我想要做的事情以及我用来解决问题的代码的更好解释。
在我的Nuget PS脚本中,我安装了bootstrap,它将CSS文件放置在我项目的Content文件夹中。我想在该文件夹内创建一个lib文件夹,然后将这些引导文件(复制并删除原件)移动到新的文件夹lib。下面是代码这样做:
install.ps1源
#Install Bootstrap
install-package bootstrap -source nuget.org
#Get the CONTENT folder object
contentFolder = $project.ProjectItems | Where-Object { $_.Properties.Item("Filename").Value -eq "Content" }
#Create the LIB folder in the CONTENT directory
$libFolder = (Get-Interface $contentFolder.ProjectItems "EnvDTE.ProjectItems").AddFolder("lib")
#Get the files to be moved
$filesToMove = $contentFolder.ProjectItems | Where-Object { $_.Properties.Item("Filename").Value -like "bootstrap*.*" }
#Copy each bootstrap item to the lib folder then delete the original
foreach($item in $filesToMove) {
Write-Host "Moving " $item.Properties.Item("FullPath").Value
(Get-Interface $libFolder.ProjectItems "EnvDTE.ProjectItems").AddFromFileCopy($item.Properties.Item("FullPath").Value)
(Get-Interface $item "EnvDTE.ProjectItem").Delete()
}
有许多不同的文章中,我除了上述(SQL Server Compact Nuget package source)提到的NuGet源代码看了一下。但是有一篇博客文章对帮助我理解VS对象模型以及我在install.ps1中做的其他一些事情特别有帮助,它是Setting DependentUpon File Properties on NuGet Package Install。