11

Tôi đang tạo Mẫu dự án Visual Studio và gói nó bên trong một Tiện ích mở rộng VS. Tôi cần các Dự án được tạo từ Mẫu để tham khảo ~ 20 gói NuGet.Tạo mẫu dự án Visual Studio kéo tham chiếu NuGet từ nguồn cấp dữ liệu trực tuyến

Có thể có các tham chiếu được giải quyết từ nuget.org thay vì phải bao gồm tất cả các tham chiếu bên trong VSIX không?

Các NuGet documentation on Visual Studio Templates cung cấp hướng dẫn về cách thêm các gói bên trong VSIX, nhưng nó đòi hỏi các tập tin được lưu trữ cục bộ trên đĩa và .nupkg là bó bên trong vsix:

Thêm file nupkg của bạn càng mở rộng thông thường nội dung trong tệp source.extension.vsixmanifest của bạn. Nếu bạn đang sử dụng giản đồ 2.0 nó sẽ giống như thế này:

<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" 
    Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" /> 

Câu hỏi đã hỏi

Tôi biết một câu hỏi tương tự đã được hỏi (Creating a Visual Studio Project Template that already includes a Nuget Package Reference?) và trả lời (không thể), nhưng điều này đã được yêu cầu vào năm 2011.

5 năm sau, vẫn không thể?

+0

Tôi hiện đang thực hiện hai mẫu. Một người dùng NPM và một người dùng NuGet. NuGet khó hơn rất nhiều ... Tôi có thể xếp cái đó và chỉ cố gắng để có được chỉ với một dựa trên NPM. – Vaccano

+0

Tại sao không kịch bản cài đặt NuGet của 20 gói và dán trong Readme.Txt? –

+0

@GerardoGrignoli - cảm thấy bị tấn công. Plus sẽ có những người không tìm ra hoặc có vấn đề nhận được thêm bước để làm việc. – Vaccano

Trả lời

1

Có, bạn có thể tạo gói nuget và thêm các gói khác làm phụ thuộc của gói. Sau đó, khi bạn tải xuống gói đó, nó sẽ nhận được tất cả các phụ thuộc của nó và thêm vào dự án của bạn.

+0

Tôi đang tìm cách tạo mẫu dự án studio trực quan, không phải gói NuGet. – Vaccano

+0

Vâng, tôi hiểu, bạn tạo mẫu và thêm gói mà bạn vừa tạo vào mẫu đó. –

+0

Xin lỗi, vấn đề của bạn là bạn không thể thêm gói nuget vào mẫu đã tạo. Lỗi của tôi. Hãy để tôi cố gắng tìm hiểu. –

6

Kể từ khi vẫn không có trong xây dựng chức năng Cài đặt/Nâng cấp gói từ Repo trực tuyến, đây là một workaround Mà nhỏ có thể giúp:

Điều kiện tiên quyết

Đầu tiên, cài đặt NuGet NuGet.VisualStudio gói vào dự án của bạn. Bạn nhận được rằng từ here

Khi được cài đặt, gói sẽ tự động đặt Nhúng Interop loại tài sản của tài liệu tham khảo lắp ráp để Đúng. Lý do nó làm như vậy là làm cho mã của bạn đàn hồi chống lại các thay đổi phiên bản khi người dùng cập nhật lên phiên bản NuGet mới hơn.

Vì lý do tương tự, bạn phải NOT sử dụng bất kỳ loại nào khác ngoài các giao diện trên trong mã của bạn. Bạn không được tham khảo bất kỳ hội đồng NuGet nào khác, bao gồm NuGet.Core.dll.

Sau khi thiết lập tất cả những thứ, có thể làm như sau trong RunFinished -Method của bạn:

var componentModel = (IComponentModel) Package.GetGlobalService(typeof(SComponentModel)); 
IVsPackageInstallerServices installerServices = 
    componentModel.GetService<IVsPackageInstallerServices>(); 

if (!installerServices.IsPackageInstalled(project, "Newtonsoft.Json")) { 
    var installer = componentModel.GetService<IVsPackageInstaller>(); 
    installer.InstallPackage(
     "All", 
     project, 
     "Newtonsoft.Json", 
     (System.Version) null, 
     false); 
} 

Note

Đó dụ cho thấy dựa trên Newtonsoft.Json làm thế nào bạn có thể cài đặt một gói. Để chắc chắn bạn có thể chọn các dự án nhắm mục tiêu cài đặt. Ngoài ra, bạn có thể xác định Phiên bản sẽ được cài đặt.

Có vẻ như hơi khó chịu, nhưng tiếc là không có cách nào khác xung quanh.

usings

using Microsoft.VisualStudio.ComponentModelHost; 
using Microsoft.VisualStudio.Shell; 
using NuGet.VisualStudio; 

Hãy cho tôi biết nếu điều đó giúp!

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