CodeLens가 활성화되어 있습니까?
10482 단어 csharpdotnetvisualstudio
그러나 이것이 한 일은 Visual Studio에서 CodeLens가 활성화되었는지 여부를 알아낼 수 있는 원인을 제공했습니다(모든 것이 비활성화된 경우 공급자는 그다지 좋은 일을 하지 않습니다).
질문은 다음과 같습니다.
둘 중 하나가 "false"인 경우 확장 프로그램에 기능을 켜는 방법 등을 설명하는 마크업을 제공할 수 있습니다. 활성화로 이동” 등
자, 문제가 설명되었습니다. 자, 어떻게 해결할까요?
글쎄요, 약간의 마법이 있다는 것이 밝혀졌지만(물론 Visual Studio 확장성입니다!) 작업을 수행하는 것도 그리 어렵지 않습니다.
서비스 공급자, MEF 또는 COM에 대해 자세히 설명하지는 않겠지만 어떤 종류의 VS 확장성을 수행하는 경우 이에 대해 어느 정도 익숙할 것입니다.
먼저 DI/IOC/MEF 등이 있기 때문에 새로운 인터페이스와 서비스를 만들었습니다.
public interface IVsSettings {
bool IsCodeLevelMetricsEnabled();
bool IsCodeLensEnabled();
}
[Export(typeof(IVsSettings))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class VsSettings : IVsSettings {
private readonly ISettingsManager _roamingSettingsManager;
[ImportingConstructor]
public VsSettings([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider) {
_roamingSettingsManager = serviceProvider.GetService(typeof(SVsSettingsPersistenceManager)) as ISettingsManager;
}
}
설정 관리자를 확인할 수 있도록 여기에 서비스 공급자를 주입해야 합니다. 유형
SVsSettingsPersistenceManager
이 자체 "버전"을 선언하지 않고는 액세스할 수 없는 내부 어셈블리에 있는 이유는 다음과 같습니다.위의 정의에 추가하면 다음과 같습니다.
public interface IVsSettings {
bool IsCodeLevelMetricsEnabled();
bool IsCodeLensEnabled();
}
[Export(typeof(IVsSettings))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class VsSettings : IVsSettings {
private readonly ISettingsManager _settingsManager;
// THIS PART HERE
[Guid("9B164E40-C3A2-4363-9BC5-EB4039DEF653")]
private class SVsSettingsPersistenceManager { }
[ImportingConstructor]
public VsSettings([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider) {
_settingsManager = serviceProvider.GetService(typeof(SVsSettingsPersistenceManager)) as ISettingsManager;
}
}
이제는 그것이 어떻게/무엇을/왜 필요한지 또는 그 GUID가 무엇과 일치하는지 솔직히 설명할 수 없습니다. Visual Studio의 모든 설정과 해당 값을 파악하기 위한 FANTASTIC 확장인 reading the source for the
Settings Store Explorer
확장을 통해 이 솔루션을 사용하게 되었습니다.완료되면 상점에서 설정을 가져오는 (일반) 방법을 추가했습니다.
public interface IVsSettings {
bool IsCodeLevelMetricsEnabled();
bool IsCodeLensEnabled();
}
[Export(typeof(IVsSettings))]
[PartCreationPolicy(CreationPolicy.Shared)]
public class VsSettings : IVsSettings {
private readonly ISettingsManager _settingsManager;
[Guid("9B164E40-C3A2-4363-9BC5-EB4039DEF653")]
private class SVsSettingsPersistenceManager { }
[ImportingConstructor]
public VsSettings([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider) {
_settingsManager = serviceProvider.GetService(typeof(SVsSettingsPersistenceManager)) as ISettingsManager;
}
// THIS PART
public T GetSetting<T>(string settingPath) {
return _settingsManager.TryGetValue(settingPath, out T value); // could throw an exception
}
}
이제
IVsSettings
를 다른 클래스/서비스에 주입하고 다음과 같이 활용할 수 있습니다.[ImportingConstructor]
public SomeOtherService(IVsSettings vsSettings){
var isCodeLensEnabled = vsSettings.GetSetting<bool>("TextEditorGlobalOptions.IsCodeLensEnabled");
var disabledCodeLensProviders = vsSettings.GetSetting<string[]>("TextEditorGlobalOptions.CodeLensDisabledProviders");
}
여기까지 하셨다면 감사합니다! 이 작업을 수행하기 위해 지난 주 동안 겪은 다양한 시련과 고난을 통해 무언가를 즐기거나 배웠기를 바랍니다.
다음 시간까지 친구들!
Reference
이 문제에 관하여(CodeLens가 활성화되어 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/calvinallen/is-codelens-enabled-7p7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)