我有一个项目,需要有两个组件 - 一个MEF组件和一个VSPackage。但是,我没有太多运气说服Visual Studio从我的VSIX加载VSPackage。这是我正在使用的.vsixmanifest:
<?xml version="1.0" encoding="utf-8"?>
<Vsix Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
<Identifier Id="VisualWide.Microsoft.03ab796d-a0e5-440d-87f9-9461dec10f23">
<Name>Visual Wide</Name>
<Author>Fuckin' Magnets</Author>
<Version>1.0</Version>
<Description>Provides Wide support for Visual Studio</Description>
<Locale>1033</Locale>
<SupportedProducts>
<VisualStudio Version="11.0">
<Edition>VST_All</Edition>
<Edition>Pro</Edition>
</VisualStudio>
</SupportedProducts>
<SupportedFrameworkRuntimeEdition MinVersion="4.5" MaxVersion="4.5" />
</Identifier>
<Content>
<MefComponent>|VisualWide|</MefComponent>
<VsPackage>VSPackage/VSPackage1.pkgdef</VsPackage>
</Content>
</Vsix>
.pkgdef我主要从向导生成的VSPackage项目中获取。
[$RootKey$\InstalledProducts\VSPackage1Package]
@="#110"
"Package"="{27d97bf0-ec8c-466d-b1a0-df926943c05e}"
"PID"="1.0"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\Packages\{27d97bf0-ec8c-466d-b1a0-df926943c05e}]
@="VSPackage1Package"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Microsoft.VSPackage1.VSPackage1Package"
"CodeBase"="$PackageFolder$\VisualWide.dll"
我更改了CodeBase元素以引用我的项目生成的DLL。
我使用了/ log开关,并检查了ActivityLog,我的pkgdef确实被找到并加载了。
但是,没有证据表明我的VSPackage正在运行。本教程中的默认VSPackage在构造函数和初始化程序中有一个log命令,它应该转到调试输出,但不会显示日志消息。 Visual Studio about页面不会列出它。我在构造函数中放置了断点并初始化(),并且它们没有被击中。
如何打包我的VSPackage以便它加载我的MEF组件?
答案 0 :(得分:3)
如果希望在Visual Studio启动时加载包,请将UICONTEXT_NoSolution属性添加到主Package类中:
[ProvideAutoLoad("ADFC4E64-0397-11D1-9F4E-00A0C911004F")]
否则只有在用户或其他模块调用其命令或服务时才加载包。