현재 레지스트리에 내 사용자 정의 추가 기능에 대한 설정을 저장하고 있지만 이것은 마치 진흙탕처럼 보입니다. 추가 기능 설정을 저장할 공식 장소가 있는지 궁금합니다. Visual Studio에서 설정을 저장하고 저장하여 쉽게 내보내고 가져올 수있는 환경을 선호합니다.Visual Studio 추가 기능은 어디에서 설정을 저장해야합니까?
Visual Studio 설정에서 추가 기능 설정을 저장할 수 있습니까? 아니면 더 좋은 방법이 있습니까?
현재 레지스트리에 내 사용자 정의 추가 기능에 대한 설정을 저장하고 있지만 이것은 마치 진흙탕처럼 보입니다. 추가 기능 설정을 저장할 공식 장소가 있는지 궁금합니다. Visual Studio에서 설정을 저장하고 저장하여 쉽게 내보내고 가져올 수있는 환경을 선호합니다.Visual Studio 추가 기능은 어디에서 설정을 저장해야합니까?
Visual Studio 설정에서 추가 기능 설정을 저장할 수 있습니까? 아니면 더 좋은 방법이 있습니까?
이 주제에 대한 내 원래 대답은 그것을 사용의 년 후에 내가 발견 한 문제의 몇했다
편집 할 수 있습니다. 나는 완전한 것을 위해 아래에 그것을 포함했다. 그러나 이것에 관한 나의 최근의 생각이 여기에있다.
응용 프로그램 설정의 사용은 VSIX에서 버전 안전하지 않습니다. 저장된 설정 파일 경로의 위치는 부분적으로 실행 파일의 버전 문자열과 해시를 포함합니다. Visual Studio에서 공식 업데이트를 설치하면 이러한 값이 변경되고 결과적으로 설정 파일 경로가 변경됩니다. Visual Studio 자체는 응용 프로그램 설정 사용을 지원하지 않으므로이 파일을 새 위치로 마이그레이션하지 않으므로 모든 정보가 손실됩니다. 지원되는 설정 방법은 WritableSettingsStore입니다. 그것은 SVsServiceProvider
가장 정직 방법은 설정을 저장하기 위해 닷넷의 Application Settings 인프라를 사용하는 것입니다
public static WritableSettingsStore GetWritableSettingsStore(this SVsServiceProvider vsServiceProvider)
{
var shellSettingsManager = new ShellSettingsManager(vsServiceProvider);
return shellSettingsManager.GetWritableSettingsStore(SettingsScope.UserSettings);
}
원래 대답을 통해 액세스 응용 프로그램 설정과 매우 유사하고 쉽게 충분하다. 프로젝트에 설정 인프라를 추가하는 디자이너 지원 기능을 갖춘 성숙한 프레임 워크입니다.
그러나 Visual Studio의 가져 오기/내보내기 설정 인프라와 통합되지 않습니다. 그 작업을하는 것은 VSPackage로 등록하고 설정 스키마를 구현하는 등 매우 복잡한 프로세스입니다. 일반적으로 실행하는 데 문제가되지 않습니다. (성공하지 못함)
다음은 빠른 자습서입니다. 이 방법은 간단하게 달성하는 방법에 대한 아이디어를 줄 수 있습니다 (한 번 수행하면 간단합니다).
아래 코드는 my extensions에서 사용하고 있습니다. VB.NET에 있지만 C#으로 쉽게 변환 될 수 있습니다.
시작하려면이 클래스를 확장 프로젝트에 추가하기 만하면됩니다. 저장해야하는 각 값에 대한 특성을 포함해야합니다. 카테고리별로 정렬 할 수도 있습니다. 지원되는 유형에 대해서는 at MSDN here으로 보일 수 있습니다 (복잡한 사례의 경우 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
그런 다음 마스터 패키지 클래스 바로 앞에 다음 특성을 추가하십시오.이제
<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
쉽게 설정에 액세스하려면 마스터 패키지 클래스에 다음 속성을 추가 할 수 있습니다
Protected ReadOnly Property Settings() As OptionPageGrid
Get
Return CType(GetDialogPage(GetType(OptionPageGrid)), OptionPageGrid)
End Get
End Property
를이 가능 친절한를 사용하여 클래스에 어디에서 값을 액세스 할 수 있습니다 :
If (Me.Settings.MyBooleanSetting) Then MsgBox("It works!");
스튜디오들이 포함되어야하는 설정을 지속 돌봐 및됩니다 비주얼 당신은 가져 오기/내보내기 기능 (또는 설정 동기화 확장 등을 사용할 때 this one).
MSDN 링크를 이용해 주셔서 감사합니다. C#에서이 작업을 수행하고 있으며, 샘플과 함께 샘플을 작성하여 실행하기가 쉽습니다. 그리드 옵션 페이지를 만드는 방법을 보여줄지라도 다른 것들을 주목할 것입니다. 그리드 옵션 페이지는 사용자가 버튼을 클릭하기를 원했기 때문에 맞춤형을 만들고 싶었습니다. – deadlydog
UI 용 WPF UserControl을 사용하여 C#에서 사용자 지정 옵션 페이지를 만드는 방법에 대해 블로그에 올렸습니다. MSDN 링크는 Windows Forms에서만이를 수행하는 방법을 보여주기 때문입니다. http://blog.danskingdom.com/adding-a-wpf-settings-page-to-the-tools-options-dialog-window-for-your-visual-studio-extension/ – deadlydog
이것이 처음 시도한 이래로 나올 수도 있지만 더 새로운 코드를 사용할 수있는 유일한 방법은 매개 변수 유형을 SVsServiceProvider에서 IServiceProvider로 변경하는 것입니다. – jschroedl