带有 MEF 编辑器扩展的 C# VSIX 项目模板

C# VSIX Project template with MEF editor extension

我正在尝试使用 VS 2013 创建一个 VSIX 扩展,其中包含两个项目(和包项目本身,所有三个项目都属于同一个解决方案)。其中一个项目是常用的Project Template,另一个是MEF editor extension(自定义代码高亮,可以编译成单独的vsix) .现在我想将这些项目合并到一个扩展中,并使我的代码突出显示 仅在 项目模板 的范围内工作(当它用作新的project later, when installed),但不在全局范围内(对于任何新项目类型)。可能吗?

V6 清单代码:

<?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="27a359e4-cefd-47c0-a02b-3454284a7a46" Version="1.0" Language="en-US" Publisher="ladybug" />
    <DisplayName>TestPackage</DisplayName>
    <Description>TestInformation</Description>
    <Icon>Resources\Package.ico</Icon>
  </Metadata>
  <Installation InstalledByMsi="false">
    <InstallationTarget Id="Microsoft.VisualStudio.Pro" Version="[12.0,]" />
    <InstallationTarget Version="[12.0,]" Id="Microsoft.VisualStudio.Ultimate" />
  </Installation>
  <Dependencies>
    <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="[3.5,)" />
    <Dependency Id="Microsoft.VisualStudio.MPF.12.0" DisplayName="Visual Studio MPF 12.0" d:Source="Installed" Version="[12.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" Path="|CodeHighligherClassifier|" />
  </Assets>
</PackageManifest>

这个组合包编译没有错误,但我无法安装它:

Install Error : System.NullReferenceException: Object reference not set to an instance of an object
   in Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.CheckForValidDotNetFramework(IExtension extension)
   in Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.CheckForInstallBlockers(InstallableExtensionImpl extension, IInstalledExtensionList modifiedInstalledExtensionsList, Boolean isNestedExtension, Boolean& olderVersionInstalled)
   in Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.InstallInternal(InstallableExtensionImpl extension, Boolean perMachine, Boolean isNestedExtension, IDictionary`2 extensionsInstalledSoFar, List`1 extensionsUninstalledSoFar, IInstalledExtensionList modifiedInstalledExtensionsList, AsyncOperation asyncOp, UInt64 totalBytesToWrite, UInt64& totalBytesWritten)
   in Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.BeginInstall(IInstallableExtension installableExtension, Boolean perMachine, AsyncOperation asyncOp)
   in Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.InstallWorker(IInstallableExtension extension, Boolean perMachine, AsyncOperation asyncOp)

什么可能导致这个错误(删除 Dependency Id="Microsoft.Framework.NDP" 解决了它,但我想保留它)?

我在使用相同的堆栈跟踪时遇到错误。这是由extension.vsixmanifest中的这一行引起的:

<SupportedFrameworkRuntimeEdition MinVersion="2.0" />

问题是我没有指定 MaxVersion,并且 Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.CheckForValidDotNetFramework 中有错误代码尝试检查最大版本而不首先测试它是否为空。解决方案是将该行更改为:

<SupportedFrameworkRuntimeEdition MinVersion="2.0" MaxVersion="99.99" />

另一个团队也遇到了类似的问题:

http://www.grasshopper3d.com/forum/topics/error-installing-gh-visual-studio-package