0

我有一个nuget powershell(install.ps1),用于组织我的“内容”目录的内容。我想将bootstrap文件(bootstrap.css,bootstrap.min.css等)移动到名为“lib”的新文件夹中,该文件夹位于“Contents”文件夹内。在NuGet PowerShell安装中的Visual Studio项目中移动文件?

我试着用ROBOCOPY,它的工作原理,但它是在文件系统上,而不是在项目

robocopy "C:\WebApplication1\Content" "C:\WebApplication1\Content\lib" bootstrap*.* /MOV 

这个代码在移动文件来完成,但随后的解决方案表明,文件丢失。我如何为Visual Studio项目执行此操作?

回答

1

你不能简单地移动文件,期望Visual Studio神奇地知道你做了什么。用记事本打开一个项目文件,你会看到项目中的所有文件都被明确引用。为了通过PowerShell完成你想要的任务,你基本上有两条道路:使用XML cmdlet来管理XML项目文件OUTSIDE Visual Studio或-better-使用Visual Studio对象模型来移动文件。

要想知道如何做到这一点,最简单的方法就是拿一个Nuget包作为例子来做类似的事情。一个合适的是SQL Server Compact Nuget package。下载它,重新命名并给它一个.zip扩展名,用你最喜欢的zip管理器打开它,看看工具目录中的一个名为VS.psm1的PowerShell模块。该模块允许您在项目中添加/删除文件。

1

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

相关问题