已安装的MSI VSPackage仅在实验性实例中加载

3

我的程序包仅在实验实例中加载。 我有以下程序包类属性:

[PackageRegistration(UseManagedResourcesOnly = true)]
[InstalledProductRegistration("#110", "#112", "3.6.1365", IconResourceID = 400)]
[ProvideMenuResource("Menus.ctmenu", 1)]
[Guid(GuidList.guidVSPackage2012PkgString)]
public sealed class VSixPackage : Package

pkgdef文件内容:

[$RootKey$\InstalledProducts\VSixPackage]
@="#110"
"Package"="{011cc127-af13-4974-903a-9e6518b2b641}"
"PID"="3.6.1365"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\Packages\{011cc127-af13-4974-903a-9e6518b2b641}]
@="VSixPackage"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Vsix3_6_1365.VSixPackage"
"CodeBase"="$PackageFolder$\Vsix3_6_1365.dll"
[$RootKey$\Menus]
"{011cc127-af13-4974-903a-9e6518b2b641}"=", Menus.ctmenu, 1"

extension.vsixmanifest :

<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
<Metadata>
  <Identity Id="011cc127-af13-4974-903a-9e6518b2b641" Version="3.6.1365" Language="en-US" Publisher="Ltd." />
  <DisplayName>Package 3.6.1365</DisplayName>
  <Description>etc...</Description>
  <Icon>Resources\Package.ico</Icon>
</Metadata>
<Installation InstalledByMsi="true" AllUsers="true">
  <InstallationTarget Id="Microsoft.VisualStudio.Pro" Version="[11.0,12.0)" />
  <InstallationTarget Version="[11.0,12.0)" Id="Microsoft.VisualStudio.Premium" />
  <InstallationTarget Version="[11.0,12.0)" Id="Microsoft.VisualStudio.Ultimate" />
</Installation>
<Dependencies>
  <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" Version="4.5" />
  <Dependency Id="Microsoft.VisualStudio.MPF.11.0" DisplayName="Visual Studio MPF 11.0" Version="11.0" />
</Dependencies>
<Assets>
  <Asset Type="Microsoft.VisualStudio.VsPackage" Path="Vsix3_6_1365.pkgdef" />
</Assets>
</PackageManifest>

这些文件(包括Vsix3_6_1365.dll)被安装到

"%VSInstallDir%\Common7\Ide\Extensions\Your Company\Your Product\Version"

文件夹。

当创建 .vsix 文件时,它成功地注册了包,但我需要使用 msi 自动完成此操作。

如何为原始的 Visual Studio(而不是实验性实例)注册它?

更新1:

我有几个不同版本的包。

[$RootKey$\InstalledProducts\VSixPackage]

在.pkgdef文件中。这可能是问题的原因吗?

更新2:

我尝试了不同的名称,而不是“VSixPackage”(添加了版本,如VSixPackage3_6_1382),但这并没有帮助。 这些VSPackages很奇怪 - 它们一段时间内可以正常工作 - 我使用VSExtension:VsixPackage安装我的包 - 它在卸载期间停止删除它。它无法为VS2013注册包。现在出现了这个问题。

1个回答

4
提供的包类、包定义文件和扩展清单上的属性似乎都没问题。我猜测扩展仅在实验性hive中加载的原因是,Visual Studio会在构建时注册扩展(至少在按F5调试扩展之前是这样)。
当您通过MSI安装扩展时,您必须以编程方式注册扩展...只需将扩展程序集文件复制到Visual Studio安装目录下的扩展文件夹中是不起作用的。如果您正在使用WiX工具集组装Windows安装程序包,您可以使用VsixPackage元素来注册扩展。
您可以在以下文档中找到相关信息:http://wixtoolset.org/documentation/manual/v3/xsd/vs/vsixpackage.html 如果您的扩展不需要任何特殊的安装任务(如写入注册表或设置其他工具和/或第三方组件),则不需要使用MSI安装,而只需从Windows资源管理器中执行vsix文件即可安装扩展;这将显示一个对话框,您需要确认安装。

我从未尝试过手动设置扩展,但你可以尝试设置以下键(可能需要更多的键;只需检查实验性Hive的配置以确定所有所需的键和值)...

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\InstalledProducts\<package-name>
    REGSZ: (Default) = #110
    REGSZ: LogoId = #400
    REGSZ: Package = <package-guid>
    REGSZ: PID = <package-product-id>
    REGSZ: ProductDetails = #112

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\BindingPaths\<package-guid>
    REGSZ: <package-installation-folder-path> = ""

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0_Config\Packages\<package-guid>
    REGSZ: (Default) = <package-name>
    REGSZ: Class = <package-class-fullname>
    REGSZ: CodeBase = <package-assembly-fullpath>
    REGSZ: InprocServer32 = "C:\Windows\SYSTEM32\MSCOREE.DLL"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接