2013-07-07 23 views
15

Tôi đã tạo mẫu dự án của riêng mình. Khi một dự án được tạo ra với khuôn mẫu, một trình thủ thuật tùy chỉnh được khởi chạy cho phép người dùng chỉnh sửa dự án đã được tạo ra.Làm thế nào để thêm gói nuget và chạy thuật sĩ tùy chỉnh dự án?

Vấn đề là tôi cũng cần thêm một số gói nuget rất đơn giản vào dự án đã tạo (chỉ mvvmlight, MyToolkit và 1 khác). Để làm điều này, tôi đã thêm một phần tử WizardData vào vstemplate của tôi với đúng gói.

Đây là vấn đề: để khởi chạy trình hướng dẫn tùy chỉnh của tôi, tôi cần đặt tham chiếu đến trình hướng dẫn của tôi bên trong phần tử WizardExtension. Nhưng để cài đặt các gói nuget tự động tôi cần đặt một tham chiếu về phía NuGet.VisualStudio.TemplateWizard bên trong phần tử WizardExtensionWizardExtension chỉ có thể có một lớp mà nó sẽ khởi tạo, nhưng tôi có 2 cần chạy.

Vậy làm cách nào để giải quyết vấn đề này?

Đây là mã khởi chạy trình hướng dẫn của riêng tôi. Bây giờ tôi chỉ cần các gói NuGet để cài đặt quá:

<WizardExtension> 
    <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=7eb2f41084fd4cd5</Assembly> 
    <FullClassName>PartyTemplateWizard.Wizard</FullClassName> 
</WizardExtension> 
<WizardData> 
    <packages repository="template"> 
     <package id="MvvmLight" version="4.1.27.0" /> 
     <package id="MvvmLightLibs" version="4.1.27.0" /> 
     <package id="MyToolkit" version="1.14.0" /> 
     <package id="linqtotwitter" version="2.1.06" /> 
    </packages> 
</WizardData> 

Có ai có giải pháp không?

+0

Bạn đã thử chạy NuGet từ dòng lệnh chưa? (nuget.exe) – Sebazzz

+0

Lập trình từ trình hướng dẫn dự án tùy chỉnh? –

+0

Tìm kiếm câu trả lời tương tự (nhưng trên một giải pháp vstemplate leve). Nhìn vào nếu tôi có thể có wizard của riêng tôi có thể gọi các chức năng của wizard Nuget. Không chắc chắn làm thế nào mặc dù. –

Trả lời

10

Vâng, tôi đã gặp phải vấn đề tương tự và đã thất vọng khi không tìm thấy câu trả lời cho bài đăng này. Bây giờ tôi đã có câu trả lời và tôi đang đăng nó.

Không thể có hai tiện ích mở rộng thuật sĩ. Vì vậy, bạn cần phải khởi tạo NuGet từ trình thủ thuật tùy chỉnh của bạn (xem bên dưới) và ủy nhiệm tất cả các phương thức cho cá thể này.

Thêm những dòng này với phương pháp RunStarted:

Assembly asm = Assembly.Load("NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a"); 
wizard = (IWizard)asm.CreateInstance("NuGet.VisualStudio.TemplateWizard"); 

Và, gọi phương thức trên dụ như thế này:

wizard.RunStarted(automationObject, replacementsDictionary, runKind, customParams); 

tương tự đại biểu cách để thể hiện thuật sĩ trong tất cả các phương pháp.

1

Thay vì cố gắng đặt nhiều tham chiếu trong một thành phần WizardExtension - bạn có thể thêm nhiều thành phần WizardExtension (một cho mỗi tham chiếu lắp ráp).

Ví dụ:

<WizardExtension> 
    <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> 
    <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> 
</WizardExtension> 

<WizardExtension> 
    <Assembly>PartyTemplateWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=7eb2f41084fd4cd5</Assembly> 
    <FullClassName>PartyTemplateWizard.Wizard</FullClassName> 
</WizardExtension> 

<WizardData> 
    <packages repository="extension" repositoryId="your-extension-id-here"> 
    <package id="MvvmLight" version="4.1.27.0" /> 
    <package id="MvvmLightLibs" version="4.1.27.0" /> 
    <package id="MyToolkit" version="1.14.0" /> 
    <package id="linqtotwitter" version="2.1.06" /> 
    </packages> 
</WizardData> 

Tài liệu tham khảo sử dụng:

Disclaimer:Tôi đã thử nghiệm này trên Visual Studio-năm 2015 chỉ; không phải trên Visual-Studio-2012 (mặc dù xem nhanh qua các câu trả lời trên số link này dường như chỉ ra rằng nó cũng được hỗ trợ trên VS2012)