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

相關問題