2011-06-29 33 views
6

Tôi đang phát triển gói nuget sẽ thiết lập dự án hiện tại để sử dụng tiêu chuẩn phiên bản lắp ráp của công ty tôi. Tôi đã có nó làm tất cả mọi thứ tôi muốn (cho đến nay) trơn tru ngoài việc thêm vào một bước xây dựng tùy chỉnh.Thêm bước xây dựng tùy chỉnh với gói gói thầu

Trước đây, việc này đã được thực hiện thủ công bằng cách chỉnh sửa trực tiếp tệp .csproj và thêm một vài thẻ mới vào xml. Đây là những ...

  • Property Group
  • Target

Nó thực sự thêm chúng nhập thành công, nhưng tôi đã làm được điều đó bằng cách chỉnh sửa xml chứ không phải thông qua các đối tượng EnvDTE trong thông số $ dự án trong install.ps1. Nhưng tôi nhận được một tin nhắn bật lên hỏi tôi nếu tôi muốn loại bỏ những thay đổi của tôi.

Tôi đã thêm $project.Save() vào tập lệnh của mình ngay trước khi tôi thực hiện thay đổi và thoát khỏi cửa sổ bật lên và tôi chỉ nhận được thông báo cho tôi biết dự án đã thay đổi và hỏi tôi có muốn tải lại hay không. Đó là tốt hơn, nhưng vẫn không hoàn hảo.

Có cách nào tốt hơn để thực hiện việc này không?

Trả lời

9

Bạn cũng có thể sử dụng gói NuGetPowerTools được viết bởi David Fowler (NuGet phát triển dẫn).

Install-Package NuGetPowerTools 

Thêm nó như là một sự phụ thuộc vào gói của bạn, sau đó trong kịch bản install.ps1, bạn có thể gọi:

Add-Import "\Path\To\Import.targets" $project.ProjectName 
Set-MSBuildProperty "MyPropertyName" "MyPropertyValue" $project.ProjectName 

$value = Get-MSBuildProperty "MyPropertyName" $project.ProjectName 

Kiểm tra mã tại https://github.com/davidfowl/NuGetPowerTools để biết thêm.

+1

Lưu ý cho người đọc trong tương lai: phiên bản mới của NuGet sẽ tự động kích hoạt tính năng này bằng cách thêm tệp '.targets' vào thư mục' tools' trong gói của bạn. – Crisfole

+1

Cảm ơn. Tôi nghĩ trong tương lai, tôi sẽ bắt đầu với "Kể từ phiên bản NuGet X.Y ...". – Kiliman

+0

Yup. Họ đang làm một công việc tuyệt vời để phát triển công cụ. – Crisfole

3

Scott Hanselman đã làm điều này ở mix11. Kỹ thuật của ông là dỡ bỏ dự án (sử dụng DTE), sửa đổi nó bằng PowerShell, sau đó tải lại (sử dụng DTE lần nữa).

http://channel9.msdn.com/Events/MIX/MIX11/FRM09

+2

Tôi đặt cược Scott sử dụng từ "poop" trong bản demo của mình. –

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