Установленный 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 создан, он успешно регистрирует пакет, но мне нужно сделать это автоматически с помощью msi. Как его можно зарегистрировать для оригинальной Visual Studio (не для экспериментального экземпляра)?
Update1:
У меня есть несколько пакетов (разных версий) с
[$RootKey$\InstalledProducts\VSixPackage]
в файле.pkgdef. Может ли это быть причиной проблемы?
Update2:
Я пробовал разные имена вместо "VSixPackage" (добавлена версия, как VSixPackage3_6_1382), но это не помогло. Странная вещь, эти VSPackages - они работали некоторое время - я использовал VSExtension:VsixPackage для установки моего пакета - он перестал удалять его во время удаления. И он не мог зарегистрировать пакет для VS2013. Теперь эта проблема.
1 ответ
Представленные атрибуты в классе пакета, файле определения пакета и манифесте расширения выглядят хорошо. Я предполагаю, что причина, по которой расширение загружается только экспериментальным кустом, заключается в том, что Visual Studio регистрирует расширение при его создании (по крайней мере, перед тем, как запустить расширение через отладчик при нажатии клавиши F5).
Когда вы устанавливаете расширение через MSI
Вы должны зарегистрировать расширение программно... просто копирование файлов сборки расширения в папку расширений в установочном каталоге Visual Studio не работает. Если вы используете WiX
набор инструментов для сборки пакета установщика Windows, вы можете использовать VsixPackage
элемент для регистрации расширения.
Вы найдете документацию по адресу: http://wixtoolset.org/documentation/manual/v3/xsd/vs/vsixpackage.html
Если ваше расширение не требует каких-либо специальных задач установки (таких как запись в реестр или настройка других инструментов и / или сторонних компонентов), MSI
установка не требуется, вместо этого вы можете установить расширение, просто выполнив файл vsix из проводника Windows; Появится диалоговое окно, в котором вы должны подтвердить установку.
Я никогда не пытался установить расширение вручную, но вы могли бы попытаться установить следующие ключи (может быть, потребуются некоторые другие; просто изучите конфигурацию экспериментального улья, чтобы выяснить все необходимые ключи и значения)...
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"