Visual studio MEF导入异常,带Visual Studio 2015扩展

Visual studio MEF导入异常,带Visual Studio 2015扩展,visual-studio,visual-studio-2015,mef,visual-studio-extensions,vsix,Visual Studio,Visual Studio 2015,Mef,Visual Studio Extensions,Vsix,希望有人能为我在VS2015扩展中使用MEF时遇到的问题提供一些指导。我试图扩展VS的IntelliSense功能,并以本教程为基础: 以下是我的ICompletionSourceProvider: [Export(typeof(ICompletionSourceProvider))] [Name("Test Statement Completion Provider")] [Order(Before = "default")] [ContentType("text")] internal cl

希望有人能为我在VS2015扩展中使用MEF时遇到的问题提供一些指导。我试图扩展VS的IntelliSense功能,并以本教程为基础:

以下是我的ICompletionSourceProvider:

[Export(typeof(ICompletionSourceProvider))]
[Name("Test Statement Completion Provider")]
[Order(Before = "default")]
[ContentType("text")]
internal class MyCompletionSourceProvider : ICompletionSourceProvider
{
    [Import]
    internal ITextStructureNavigatorSelectorService NavigatorService { get; set; }

    [Import]
    internal IServiceProvider ServiceProvider { get; set; }

    public ICompletionSource TryCreateCompletionSource(ITextBuffer textBuffer)
    {
        return new MyCompletionSource(this, textBuffer);
    }
}
奇怪的是,这在我的机器上运行得很好(这段代码最初是在这里开发的),但在我尝试过的所有其他机器上都无法运行(无论是调试还是发布)。永远不会命中TryCreateCompletionSource中的断点。我怀疑该MEF组件从未被导出,因此我下载了MSDN上推荐的mefx工具,并在生成的DLL上执行该工具,并收到以下信息:

[Primary Rejection]
[Export] MyVSIX.Source.MyCompletionSourceProvider             (ContractName="Microsoft.VisualStudio.Language.Intellisense.ICompletionSourceProvider")
[Import] MyVSIX.Source.MyCompletionSourceProvider.NavigatorService (ContractName="Microsoft.VisualStudio.Text.Operations.ITextStructureNavigatorSelectorService")
[Exception]   System.ComponentModel.Composition.ImportCardinalityMismatchException: No exports   were found that match the constraint:
ContractName      Microsoft.VisualStudio.Text.Operations.ITextStructureNavigatorSelectorService    
RequiredTypeIdentity      Microsoft.VisualStudio.Text.Operations.ITextStructureNavigatorSelectorService
at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
at Microsoft.ComponentModel.Composition.Diagnostics.CompositionInfo.AnalyzeImportDefinition(ExportProvider host, IEnumerable`1 availableParts, ImportDefinition id)    
[Import] MyVSIX.Source.MyCompletionSourceProvider.ServiceProvider (ContractName="System.IServiceProvider")
[Exception] System.ComponentModel.Composition.ImportCardinalityMismatchException: No exports were found that match the constraint: 
ContractName    System.IServiceProvider
RequiredTypeIdentity    System.IServiceProvider
at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
at Microsoft.ComponentModel.Composition.Diagnostics.CompositionInfo.AnalyzeImportDefinition(ExportProvider host, IEnumerable`1 availableParts, ImportDefinition id)
如果我删除[Import]语句,这些都会得到解决,事情会重新开始。但从教程来看,这似乎应该是可行的。这也不能解释为什么它在我的机器上100%工作,而在其他任何机器上都不工作

这是我的.vsixmanifest文件:

<?xml version="1.0" encoding="utf-8"?>
  <PackageManifest Version="2.0.0"  xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011"  xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
    <Metadata>
    <Identity Id="MyVSIX.Company.39048217-955a-4402-84e9-8a24f0730e72" Version="1.0" Language="en-US" Publisher="MyVSIX" />
    <DisplayName>MyVSIX</DisplayName>
    <Description xml:space="preserve"></Description>
    <Icon>Resources\MyVSIX.ico</Icon>
  </Metadata>
  <Installation>
  <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[14.0]" />
  </Installation>
  <Dependencies>
    <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[4.5,)" />
    <Dependency Id="Microsoft.VisualStudio.MPF.14.0" DisplayName="Visual Studio MPF 14.0" d:Source="Installed" Version="[14.0]" />
  </Dependencies>
  <Assets>
    <Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
    <Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%|" />
    <Asset Type="Microsoft.VisualStudio.ItemTemplate" Path="Output\ItemTemplates" />
    <Asset Type="Microsoft.VisualStudio.ProjectTemplate" Path="Output\ProjectTemplates" />
  </Assets>
</PackageManifest>

MyVSIX
参考资料\MyVSIX.ico

找出了它为什么不能在其他机器上工作,但我仍然无法理解它为什么能在我的机器上工作。我改变了这一点:

[Import]
internal IServiceProvider ServiceProvider { get; set; }
为此:

[Import(typeof(SVsServiceProvider)]
internal IServiceProvider ServiceProvider { get; set; }
希望这对将来的人有所帮助-我花了2天时间来解决这个问题