2011-06-23 35 views
31

Tôi muốn thêm thư mục giải pháp và các mục giải pháp (không phải dự án) vào tệp giải pháp qua gói NuGet. Tôi tưởng tượng điều này sẽ được thực hiện thông qua Powershell. Tôi đã xem qua tài liệu về NuGet, Powershell và EnvDTE và không thể tìm ra:Thêm các mục mức dung lượng trong gói NuGet

  1. Tôi sẽ sử dụng các lệnh/phương pháp nào?
  2. Kịch bản tiêu chuẩn nào tôi sẽ thực hiện việc này trong, Init.ps1, Install.ps1 hoặc ở nơi khác?

Trả lời

51

Đây là tập lệnh PowerShell sẽ tạo thư mục giải pháp có tên là Parent và thư mục giải pháp khác có tên Child bên trong thư mục đó. Nó cũng thêm một tệp dự án (MyProject.csproj) vào thư mục Child solution.

# Get the open solution. 
$solution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 

# Create the parent solution folder. 
$parentProject = $solution.AddSolutionFolder("Parent") 

# Create a child solution folder. 
$parentSolutionFolder = Get-Interface $parentProject.Object ([EnvDTE80.SolutionFolder]) 
$childProject = $parentSolutionFolder.AddSolutionFolder("Child") 

# Add a file to the child solution folder. 
$childSolutionFolder = Get-Interface $childProject.Object ([EnvDTE80.SolutionFolder]) 
$fileName = "D:\projects\MyProject\MyProject.csproj" 
$projectFile = $childSolutionFolder.AddFromFile($fileName) 

Hai giao diện Visual Studio chính đang được sử dụng ở đây là Solution2SolutionFolder. Nó cũng sử dụng chức năng Get-Interface được cung cấp bởi NuGet.

Đối với gói giải pháp chỉ bạn nên đặt tập lệnh của mình bằng init.ps1 vì install.ps1 chỉ được gọi cho gói dựa trên dự án. Init.ps1 chạy một lần cho một giải pháp khi gói được cài đặt lần đầu tiên và mỗi khi giải pháp được mở lại trong Visual Studio.

Để thêm tập tin tùy ý (file phi dự án) vào một thư mục giải pháp bạn sẽ cần phải làm một cái gì đó tương tự như sau:

$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 
$vsProject = $vsSolution.AddSolutionFolder("newFolder") 
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems]) 
$projectItems.AddFromFile("pathToFileToAdd.txt") 

gì là mất tích từ kịch bản PowerShell đây là khai báo thông số tiêu chuẩn tại đầu tệp.

param($installPath, $toolsPath, $package, $project) 

Điều còn thiếu là kiểm tra xem thư mục và thư mục giải pháp đã tồn tại chưa. Tôi sẽ để nó như một bài tập để bạn làm.

+0

Cảm ơn bạn, đây chính xác là những gì tôi đang tìm kiếm. – brainiac10

+0

là có cách nào để gỡ lỗi init script? – smnbss

+1

Bạn có thể thử set-psdebug trong bảng điều khiển NuGet Package Manager. Tôi chỉ cố gắng chạy các lệnh trong cửa sổ giao diện điều khiển đối với một dự án đang hoạt động. Cách khác là viết đầu ra vào cửa sổ giao diện điều khiển. –

Các vấn đề liên quan