【问题标题】:Visual Studio Package Initialize method does not call when debugging调试时不调用 Visual Studio 包初始化方法
【发布时间】:2011-08-30 17:59:23
【问题描述】:

目前,我正在使用 MEF 开发 Visual Studio 2010 的扩展,我需要初始化我的全局状态。我正在尝试在 Package.Initialize 方法中做到这一点

[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "1.0.0.0", IconResourceID = 400)]
[Guid("1AF4B41B-F2DF-4F49-965A-816A103ADFEF")]
public sealed class MyPackage : Package
{

    protected override void Initialize()
    {
        ContainerConfigurator.Configure();
        ContainerConfigurator.IsInitialized = true;
        base.Initialize();
    }
}

我还有一个使用此状态的 MEF 分类器提供程序

[Export(typeof(IClassifierProvider))]
[Name("This is my provider")]
[ContentType("DebugOutput")]
[ContentType("Output")]
public class MyClassifierProvider : IClassifierProvider
{
    [Import]
    private IClassificationTypeRegistryService _classificationRegistry = null; // MEF

    public IClassifier GetClassifier(ITextBuffer textBuffer)
    {
        // This always false
        if (!ContainerConfigurator.IsInitialized)
           throw new InvalidOperationException();

        return textBuffer.Properties.GetOrCreateSingletonProperty(() => new TypedClassifier(ServiceLocator.Current, _classificationRegistry));
    }
}

包和 MEF 分类器都在同一个程序集中。当我开始调试并放置断点时,我看到该程序集已加载。但是 MyClassifierProvider 在 MyPackage.Initialize 调用之前已经被初始化。所以我无法在任何 MEF 组件启动之前初始化我的全局状态。谁能解释为什么以及如何避免这种行为?

谢谢

【问题讨论】:

    标签: c# visual-studio-2010 mef


    【解决方案1】:

    我找到了答案。需要添加ProvideAutoLoad属性

    http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.vsconstants(v=vs.80).aspx

    http://dotneteers.net/blogs/divedeeper/archive/2008/03/23/LVNSideBar1.aspx

    所以最终的类声明是

    [PackageRegistration(UseManagedResourcesOnly = true)]
    [InstalledProductRegistration("#110", "#112", "1.0.0.0", IconResourceID = 400)]
    [Guid("1AF4B41B-F2DF-4F49-965A-816A103ADFEF")]
    [ProvideAutoLoad("ADFC4E64-0397-11D1-9F4E-00A0C911004F")]
    public sealed class MyPackage : Package
    

    【讨论】:

    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 2015-09-12
    • 2020-12-22
    • 2017-06-08
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多