5

MEF コンポーネントと VSPackage の 2 つのコンポーネントである必要がある 1 つのプロジェクトがあります。ただし、VSIX から VSPackage をロードするように Visual Studio を説得することはできませんでした。私が使用している .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>

ウィザードで生成された VSPackage プロジェクトから主に取得した .pkgdef。

[$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"

プロジェクトが生成する DLL を参照するように CodeBase 要素を変更しました。

/log スイッチを使用して ActivityLog を調べたところ、実際に pkgdef が見つかり、読み込まれています。

ただし、VSPackage が機能しているという証拠はありません。チュートリアルの既定の VSPackage には、コンストラクターとイニシャライザーにログ コマンドがあり、デバッグ出力に移動する必要がありますが、ログ メッセージは表示されません。Visual Studio の about ページにはリストされていません。コンストラクターと initialize() にブレークポイントを配置しましたが、ヒットしません。

MEF コンポーネントが読み込まれるように VSPackage をパッケージ化するにはどうすればよいですか?

4

1 に答える 1

3

Visual Studio の起動時にパッケージを読み込む場合は、メインの Package クラスにUICONTEXT_NoSolution属性を追加します。

    [ProvideAutoLoad("ADFC4E64-0397-11D1-9F4E-00A0C911004F")]

それ以外の場合、パッケージは、そのコマンドまたはサービスがユーザーまたは他のモジュールによって呼び出されたときにのみ読み込まれます。

于 2013-10-06T04:53:54.907 に答える