2013-09-30 28 views
3

我的程序包僅在實驗實例中加載。 我有以下的包類屬性:已安裝MSI僅在實驗實例中加載VSPackage

[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文件時,它會成功註冊Package,但我需要使用msi自動執行此操作。 如何註冊原始Visual Studio(不是實驗性實例)?

UPDATE1:

我有幾個包(不同版本)與

[$RootKey$\InstalledProducts\VSixPackage] 

在.pkgdef文件。這是問題的原因嗎?

UPDATE2:

我嘗試了不同的名稱,而不是 「VSixPackage」(補充版一樣VSixPackage3_6_1382),但是這並沒有幫助。 這些VSPackages奇怪的事情 - 他們工作了一段時間 - 我用VSExtension:VsixPackage來安裝我的軟件包 - 它在卸載過程中不再刪除它。它無法註冊VS2013的軟件包。現在這個問題。

回答

4

包類,程序包定義文件和擴展清單提供的屬性似乎沒問題。我猜測擴展只被實驗配置單元加載的原因是因爲Visual Studio在構建它時註冊了擴展(至少在按F5時通過調試器運行擴展之前)。

當您通過MSI安裝擴展時,您必須以編程方式註冊擴展...只是將擴展程序集文件複製到Visual Studio安裝目錄下的擴展文件夾不起作用。如果您使用WiX工具集來組裝Windows安裝程序包,則可以使用VsixPackage元素來註冊擴展。

您可滿足在文檔:http://wixtoolset.org/documentation/manual/v3/xsd/vs/vsixpackage.html

如果您的擴展不需要任何特殊的安裝任務(如寫入註冊表或設立其他工具和/或第三方組件),一個MSI安裝不需要,只需從Windows資源管理器執行vsix文件即可安裝擴展程序;這將顯示一個對話框,您可以確認安裝。

我從來沒有嘗試手動設置擴展名,但是您可以嘗試設置以下按鍵(可能還需要更多一些按鍵;只需檢查實驗配置單元的配置以確定所有必需的按鍵和值)即可......

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"