繁体   English   中英

在NuGet PowerShell安装中的Visual Studio项目中移动文件?

[英]Move file(s) in a Visual Studio project in NuGet PowerShell install?

我有一个nuget powershell(install.ps1),在这里组织“目录”目录的内容。 我想将引导文件(bootstrap.css,bootstrap.min.css等)移动到名为“ lib”的新文件夹中,该文件夹位于“目录”文件夹中。

我尝试使用有效的RoboCopy,但它是在文件系统上完成的,而不是在项目中完成的

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

该代码可用于移动文件,但是该解决方案随后显示文件丢失。 如何为Visual Studio项目执行此操作?

您不能简单地移动文件并期望Visual Studio神奇地知道您所做的事情。 使用记事本打开项目文件,您将看到显式引用了项目中的所有文件。 为了通过PowerShell进行所需的工作,基本上有两条路:在XML Studio外部使用XML cmdlet来修饰XML项目文件,或者-更好地使用Visual Studio对象模型来移动文件。

要了解如何执行此操作,最简单的方法是以已经完成类似操作的Nuget包为例。 SQL Server Compact Nuget软件包是一个很好的选择。 下载它,重命名并给它一个.zip扩展名,使用您最喜欢的zip管理器将其打开,然后在tools目录中查看一个名为VS.psm1的PowerShell模块。 该模块允许您在项目中添加/删除文件。

更新后的答案:所以我想我应该在问题上说得更具体些,并说我正在Nuget PowerShell安装文件(install.ps1)中寻求有关Visual Studio对象模型的帮助。 上面选择的答案肯定为我指明了正确的方向,并且非常有帮助。

该答案还具有一个额外的好处,包括“神奇地”知道我要做什么的关于VS的反手,屈尊的评论。 下次,我将提供更多有关我对VS项目文件的理解的详细信息,并且清楚地表明我实际上是在寻找有关如何在VS对象模型中移动文件的信息,以避免出现错误……但是我离题了。 以下是对我正在尝试做的事情以及用于解决问题的代码的更好解释。

在我的Nuget PS脚本中,我正在安装引导程序,该程序将其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()
}

除了上面提到的Nuget源代码( SQL Server Compact Nuget包源代码 )之外,我还查看了许多其他文章。 但是一篇博客文章对帮助我理解VS对象模型以及我在install.ps1中正在做的其他事情特别有用,它是在NuGet软件包安装上设置DependentUpon文件属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM