2010-08-20 27 views
21

Hiện tại tôi đang lưu các cài đặt cho các bổ trợ tùy chỉnh của mình trong sổ đăng ký nhưng điều này có vẻ giống như một kludge. Tôi đã tự hỏi nếu có một nơi chính thức để lưu trữ cài đặt bổ trợ. Sở thích của tôi là lưu trữ chúng nơi cài đặt cửa hàng Visual Studio để chúng có thể được xuất và nhập dễ dàng.Trình bổ sung Visual Studio nên lưu cài đặt của nó ở đâu?

Có thể lưu cài đặt bổ trợ bằng cài đặt Visual Studio hoặc có cách nào tốt hơn không?

Trả lời

8

EDIT

câu trả lời ban đầu của tôi với chủ đề này đã có một vài vấn đề tôi phát hiện ra sau nhiều năm sử dụng nó. Tôi đã bao gồm nó dưới đây cho đầy đủ nhưng đây là những suy nghĩ của tôi cập nhật về điều này.

Việc sử dụng cài đặt ứng dụng không phải là phiên bản an toàn trong VSIX. Vị trí của đường dẫn tệp thiết lập được lưu trữ một phần bao gồm chuỗi phiên bản và các chuỗi của tệp thực thi. Khi Visual Studio cài đặt bản cập nhật chính thức, các giá trị này thay đổi và hậu quả là thay đổi đường dẫn tệp thiết lập. Visual Studio chính nó không hỗ trợ việc sử dụng các thiết lập ứng dụng do đó nó không cố gắng di chuyển tệp này đến vị trí mới và tất cả thông tin về cơ bản bị mất. Phương thức cài đặt được hỗ trợ là WritableSettingsStore. Nó rất giống với cài đặt ứng dụng và dễ dàng, đủ để truy cập thông qua SVsServiceProvider

public static WritableSettingsStore GetWritableSettingsStore(this SVsServiceProvider vsServiceProvider) 
{ 
    var shellSettingsManager = new ShellSettingsManager(vsServiceProvider); 
    return shellSettingsManager.GetWritableSettingsStore(SettingsScope.UserSettings); 
} 

gốc trả lời

Cách thẳng nhất về phía trước là sử dụng cơ sở hạ tầng Application Settings Net để lưu trữ bất kỳ cài đặt. Đó là một khuôn khổ hoàn thiện với sự hỗ trợ của nhà thiết kế để thêm cơ sở hạ tầng cài đặt vào dự án của bạn.

Tuy nhiên, nó không tích hợp với cơ sở hạ tầng cài đặt Xuất/Nhập của Visual Studio. Làm việc đó là một quá trình rất có liên quan bao gồm việc đăng ký bản thân như một VSPackage, thực hiện một lược đồ cài đặt, v.v ... Tôi thường thấy nó thực sự không đáng để chạy (không bao giờ thành công)

+0

Tôi có thể tắt vì đây là lần đầu tiên tôi thử cách này nhưng cách duy nhất tôi có thể sử dụng mã mới hơn của bạn là thay đổi loại tham số từ SVsServiceProvider thành IServiceProvider. – jschroedl

9

Đây là hướng dẫn nhanh có thể cung cấp cho bạn một ý tưởng về cách để đạt được điều này đơn giản (nó khá đơn giản một khi bạn đã thực hiện nó một lần).

Tôi đã xuất phát mã dưới đây từ những gì tôi sử dụng trong my extensions; nó là trong VB.NET, nhưng có thể dễ dàng chuyển đổi thành C#.

Để bắt đầu, chỉ cần thêm lớp này vào dự án tiện ích mở rộng của bạn. Nó phải chứa một thuộc tính cho mỗi giá trị bạn cần lưu trữ. Bạn thậm chí có thể sắp xếp chúng trong các danh mục. Bạn có thể xem at MSDN here đối với các loại được hỗ trợ (đối với các trường hợp phức tạp hơn, bạn có thể tham khảo "trang tùy chọn được tùy chỉnh", chủ đề được bao gồm by MSDN here).

Imports Microsoft.VisualBasic 
Imports System 
Imports System.Diagnostics 
Imports System.Globalization 
Imports System.Runtime.InteropServices 
Imports System.ComponentModel.Design 
Imports Microsoft.Win32 
Imports Microsoft.VisualStudio 
Imports Microsoft.VisualStudio.Shell.Interop 
Imports Microsoft.VisualStudio.OLE.Interop 
Imports Microsoft.VisualStudio.Shell 
Imports System.Threading 
Imports System.Text.RegularExpressions 
Imports System.ComponentModel 

<ClassInterface(ClassInterfaceType.AutoDual)> 
<CLSCompliant(False), ComVisible(True)> 
Public Class OptionPageGrid 
    Inherits DialogPage 

    Private _MyBooleanSetting As Boolean = False 
    <Category("The name or an alias of my extension name")> 
    <DisplayName("Simple name of this setting displayed for the user")> 
    <Description("Longer description of this setting")> 
    Public Property MyBooleanSetting() As Boolean 
     Get 
      Return Me._MyBooleanSetting 
     End Get 
     Set(ByVal value As Boolean) 
      Me._MyBooleanSetting = value 
     End Set 
    End Property 

    Private _MyIntegerSetting As Integer = 2 
    <Category("The name or an alias of my extension name")> 
    <DisplayName("Simple name of this setting displayed for the user")> 
    <Description("Longer description of this setting")> 
    Public Property MyIntegerSetting() As Integer 
     Get 
      Return Me._MyIntegerSetting 
     End Get 
     Set(ByVal value As Integer) 
      Me._MyIntegerSetting = value 
     End Set 
    End Property 

    Private _MyStringSetting As String = "DefaultStringValue" 
    <Category("The name or an alias of my extension name")> 
    <DisplayName("Simple name of this setting displayed for the user")> 
    <Description("Longer description of this setting")> 
    Public Property MyStringSetting() As Integer 
     Get 
      Return Me._MyStringSetting 
     End Get 
     Set(ByVal value As Integer) 
      Me._MyStringSetting = value 
     End Set 
    End Property 
End Class 

Sau đó, thêm các thuộc tính sau ngay trước lớp gói chính của bạn.

<ProvideOptionPage(GetType(OptionPageGrid), "The name or an alias of my extension name", "The name of a category of settings", 0, 0, True)> 
Public NotInheritable Class MyExtensionMainClass 
    Inherits Package 

Bây giờ để dễ dàng truy cập các thiết lập, bạn có thể thêm các tài sản sau đây trong lớp gói tổng thể của bạn:

Protected ReadOnly Property Settings() As OptionPageGrid 
    Get 
     Return CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid) 
    End Get 
End Property 

Điều này làm cho nó có thể truy cập một giá trị từ bất cứ nơi nào trong lớp sử dụng thân thiện:

If (Me.Settings.MyBooleanSetting) Then MsgBox("It works!"); 

Visual Studio sẽ chăm sóc kiên trì các thiết lập, và họ nên được bao gồm khi bạn sử dụng chức năng nhập khẩu/xuất khẩu (hoặc bất kỳ phần mở rộng cài đặt đồng bộ như this one).

+0

Cảm ơn các liên kết MSDN. Tôi đang làm điều này trong C#, và mẫu của họ cùng với bạn đã làm cho nó khá dễ dàng để có được và chạy. Tôi sẽ lưu ý cho những người khác mặc dù bạn cho thấy cách tạo Trang tùy chọn lưới, nơi tôi muốn tạo một tùy chỉnh, vì tôi muốn các nút cho người dùng nhấp vào. – deadlydog

+0

Tôi đã viết blog về cách tạo Trang tùy chỉnh tùy chỉnh trong C# bằng cách sử dụng WPF UserControl cho giao diện người dùng, vì liên kết MSDN chỉ hiển thị cách thực hiện với Windows Forms. http://blog.danskingdom.com/adding-a-wpf-settings-page-to-the-tools-options-dialog-window-for-your-visual-studio-extension/ – deadlydog

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