6

いくつかのプロジェクトテンプレートを含むVisualStudio2010用のVISX拡張機能を作成しようとしています。これらのテンプレートはそれほど複雑ではありませんが、ウィザードを使用して作成するときに、それらの追加の構成を公開したいと思います。VS2010で必要なディレクトリ構造にテンプレートを展開するようにVISXパッケージを正常に設定しましたが、ウィザードを構成して実行しようとすると、次の行に沿ってテンプレートを作成するとエラーが発生します。

エラー:このテンプレートはコンポーネントアセンブリを読み込もうとしました'My.Assembly、バージョン1.0.0.0、Culture = neutral、PublicKeyToken = .. ..

私の現在の構成は次のとおりです。

  • すべてのプロジェクトは同じソリューションで実行されます。
  • VISXプロジェクトには、ウィザードを含むプロジェクトおよび各テンプレートへのプロジェクト参照が含まれています。
  • 各テンプレートは、プロジェクトテンプレートテンプレートから構築されます(...紛らわしい用語)。
  • これらは、プロジェクトを参照して、.vsixmanifestデザイナーを介してコンテンツとして追加されます。
  • 各.vstemplateファイルには、IWizard実装を指し、アセンブリを含むWizardExtension要素があります。
  • ウィザードアセンブリが署名されています。

.vstemplateファイルは、次のようなウィザードを指します。

<WizardExtension>

<Assembly> My.Assembly、Version = 1.0.0.1、Culture = neutral、PublicKeyToken = a494da9e6e53f845、Custom = null </ Assembly>

<FullClassName> My.Assembly.Wizard </ FullClassName>

</ WizardExtension>

これは、私が知る限り、私がそれを行うことになっている方法です。正確には何が問題になっていますか?アセンブリが見つからないようです。アセンブリをテンプレートに表示するために必要な他の手順はありますか?アセンブリは、インストール時に拡張フォルダーに展開されるため(これを確認しました)、少なくとも作成中です。.vstemplateファイルに対して、拡張フォルダーとGACを比較するように指示するために特別なことをする必要がありますか?私はただ何かを逃しましたか?

インターネット上で、手動またはスクリプトを使用してアセンブリをGACする必要があると述べているページをいくつか見つけたことに注意してください。ただし、私の正確なシナリオはほとんどありませんでした(プロジェクトテンプレートテンプレートはVISXプロジェクトによって参照されています。ほとんどの例では、プロジェクトテンプレートウィザードを介してエクスポートされた通常のプロジェクトを使用し、パッケージをVISXフォルダー構造にダンプしています)。私のシナリオに一致することがわかったのは、Microsoftの例だけでした。私はそれに合わせようとしましたが、残念ながらそれでも機能しません。この質問で参照するためにダウンロードしたプロジェクトを再配置しようとしましたが、再度見つけることができません。

スクリプトの使用はこれまでのやり方ですが、VISXパッケージを使用して少しすっきりさせたいと思います。これは避けたいのですが、テンプレートをGACにインストールするためにVISXのスクリプトを作成する必要がある場合は、それを行うことができます。

4

3 に答える 3

2

ウィザード ベースのプロジェクト テンプレートを VSIX 拡張機能で配置する場合は、.vstemplate で短い名前のアセンブリを使用することをお勧めします。これにより、GAC の展開を回避できます。

あなたの場合、それは次のようになります。

<WizardExtension>
 <Assembly>My.Assembly</Assembly>
 <FullClassName>My.Assembly.Wizard</FullClassName>
</WizardExtension>
于 2012-07-23T04:54:01.037 に答える
1

私はVS2015を使用しており、この問題にオンとオフで直面しました。ウィザードの実装で VSIX プロジェクトの構築を開始したとき、しばらくの間 (4 ~ 6 週間) はすべて正常に機能し、突然機能しなくなりました。数週間後、再び機能し始め、予告なしに機能しなくなりました。回避策を見つけるのに長い時間がかかりました(なぜ突然停止するのかまだわかりません)。

これが私のVSIXプロジェクトの構築方法です

  1. 同じソリューションに VSIX プロジェクト、プロジェクト テンプレート、およびウィザードの実装があります。
  2. VSIX とウィザードの実装は同じプロジェクトにあります。
  3. VSIX プロジェクト source.extension.vsixmanifest の資産として VSIX プロジェクト dll とプロジェクト テンプレートを追加しました。
  4. プロジェクト テンプレート *.vstemplate には、厳密な名前を持つ VSIX プロジェクトを参照するウィザード セクションがあります: <<<<<<<<<<<<<<<<<<<<<

    <WizardExtension>
        <Assembly>Test.Template.TemplateInstallerWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ab381f68dc4f5e</Assembly>
        <FullClassName>Test.Template.TemplateInstallerWizard.WizardImplementation</FullClassName>
      </WizardExtension>
    

これらのどれも私にとってはうまくいきませんでした

  1. [ツール] -> [拡張機能と更新プログラム] を使用して、VS 通常のインスタンスから拡張機能をアンインストールしました。
  2. 管理者として VS2015 コマンド プロンプトから VS exp インスタンスを起動して、VS 実験インスタンスから拡張機能をアンインストールしました。

    devenv.exe /rootsuffix exp

    次に、[ツール] -> [拡張機能と更新プログラム] から拡張機能をアンインストールします。

  3. @Ethan Wu で説明されているように、短い名前のアセンブリを使用します。

  4. 管理者として起動された VS2015 コマンド プロンプトからこのコマンドを使用してテンプレートをインストールします。

    devenv /installvstemplates

  5. このプロセス中に私のマシンであるVS2015を数回再起動します。

これは私のために働いたものです(@Ethan Wuに感謝)

  1. VSIX プロジェクトから証明書を削除します。

  2. プロジェクト テンプレート *.vstemplate ファイルから厳密な名前を削除する
  3.     <WizardExtension>
          <Assembly>Test.Template.TemplateInstallerWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly>
      <FullClassName>Test.Template.TemplateInstallerWizard.WizardImplementation
    

  4. プロジェクトをクリーンアップしてビルドします。
  5. VS 通常のインスタンスから拡張機能を削除し、VS2015 を閉じます (絶対に必要というわけではありません)。
  6. 拡張機能をインストールします。
  7. 新しい VS2015 インスタンスを開き、ウィザードでプロジェクトを作成してみます。


デバッグに役立ついくつかのこと

  1. VSIX プロジェクトがビルドされると、bin\debug フォルダーにファイルが作成されます -extension.vsixmanifest には、資産の種類があります。

  2. Asset Type="Microsoft.VisualStudio.Assembly" を探します。AssemblyName の値は、プロジェクト テンプレートの *.vstemplate WizardExtension セクションで期待される値です。正確に一致する必要があります。

  3. 拡張機能をインストールしたら、ローカル ボックスの VS2015 拡張機能の場所に移動します。

    %appdata%\..\Local\Microsoft\VisualStudio\14.0\Extensions\<some_temp_folder>
    

    extension.vsixmanifest を開いて、Asset Type="Microsoft.VisualStudio.Assembly" AssemblyName 値が正しく設定されていることを確認します。必要に応じて、この値を変更し、VS2015 を再起動してこれを有効にすることができます。

ウィザードとカスタム プロジェクト テンプレートに関するヘルプはほとんどないため、これが誰かの役に立ち、時間を大幅に節約できることを願っています。

ありがとう、

RDV

于 2017-05-31T02:22:28.417 に答える