Search code examples
visual-studiomanifestvsixvsixmanifest

vsixmanifest for all: VS 2010, 2012 and 2013


I'm using VSIX Manifest Designer under VS2013. I've added Microsoft.VisualStudio.Pro product identifier and [10.0,13.0) version range to install targets. Despite that fact, I still don't see my VS2010 Professional as an available installation target:

enter image description here

The source.extension.vsixmanifest file content is shown below:

<?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="ae98c9e5-8e14-4c92-b45a-c4fd24a49123" Version="1.0" Language="en-US" Publisher="whosoever" />
    <DisplayName>MyExtension</DisplayName>
    <Description xml:space="preserve">whosoever</Description>
    <MoreInfo>http://www.myextension.com</MoreInfo>
    <License>LICENSE.txt</License>
    <Icon>icon.png</Icon>
    <PreviewImage>screenshot.png</PreviewImage>
  </Metadata>
  <Installation InstalledByMsi="false">
    <InstallationTarget Version="[10.0,13.0)" Id="Microsoft.VisualStudio.Pro" />
  </Installation>
  <Dependencies>
    <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" d:Source="Manual" Version="4.5" />
    <Dependency Id="Microsoft.VisualStudio.MPF.11.0" DisplayName="Visual Studio MPF 11.0" d:Source="Installed" Version="11.0" />
  </Dependencies>
  <Assets>
    <Asset Type="Microsoft.VisualStudio.VsPackage" d:Source="Project" d:ProjectName="%CurrentProject%" Path="|%CurrentProject%;PkgdefProjectOutputGroup|" />
  </Assets>
</PackageManifest>

What should be changed to enable installation of this extension to VS2010, 2012 and 2013?


Solution

  • What you have is the version 2 VSIX manifest, which is not compatible with Visual Studio 2010. Later Visual Studio versions respect version 1 of the manifest, so in order to support all 3 Visual Studio versions with a single manifest, you'll have to convert it to v1.0 manually (and make sure NOT to edit it with VS2012+, otherwise it will be converted back to v2.0).

    Something like this:

    <?xml version="1.0" encoding="utf-8"?>
    <Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
      <Identifier Id="ae98c9e5-8e14-4c92-b45a-c4fd24a49123">
        <Name>MyExtension</Name>
        <Author>whosoever</Author>
        <Version>1.0</Version>
        <Description xml:space="preserve">Your decription.</Description>
        <Locale>1033</Locale>
        <SupportedProducts>
          <VisualStudio Version="10.0">
            <Edition>Pro</Edition>
          </VisualStudio>
          <VisualStudio Version="11.0">
            <Edition>Pro</Edition>
          </VisualStudio>
          <VisualStudio Version="12.0">
            <Edition>Pro</Edition>
          </VisualStudio>
        </SupportedProducts>
        <SupportedFrameworkRuntimeEdition MinVersion="4.0" />
      </Identifier>
      <Content>
        <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
        <MefComponent>|%CurrentProject%|</MefComponent>
      </Content>
    </Vsix>
    

    You don't have to specify all product editions (called SKUs), Pro is enough, if, say, Ultimate is installed, it will be displayed instead.