2

VS2010 に単一ファイル ジェネレーターをインストールする方法を見つけようとしています。以前は、何時間も頭をぶつけた後、VS2013 で動作するようになりました。どちらの場合も、主な問題はレジストリ エントリの設定です。どうやらVSIXファイルはレジストリ設定を許可していないようです:

VSIX 形式を使用して、プロジェクトと項目のテンプレート、Visual Studio 統合パッケージ、Managed Extensibility Framework (MEF) コンポーネント、ツールボックス コントロール、アセンブリ、カスタム タイプをパッケージ化できます。VSIX 形式では、厳密にファイル ベースの展開が使用され、グローバル アセンブリ キャッシュ (GAC) やシステム レジストリへの書き込みはサポートされていません。VSIX は、サポートされている拡張機能の種類に適した展開方法です。

私の VS2013 ソリューションにはアセンブリのCodeGeneratorRegistrationAttributeandが含まれていますが、インストール後、ユーザーが管理者モードで実行するComVisible(true)まで拡張機能は機能しません。devenv.exe /setupVS2010 ではCodeGeneratorRegistrationAttribute、どの SDK DLL にも存在せず、単純に CodeGeneratorRegistrationAttribute.cs のソース コードをプロジェクトに追加するだけでは ( Single File Generator サンプルのように) 機能しないようです (サンプルがなぜ.NET は構造型付けを使用しないため、この属性がどのように影響を与える可能性があるのでしょうか?)

VSIX がレジストリ設定を直接追加できない場合、妥当な代替手段は、VS の起動時に自動的に実行されるコードを含めることだと思います。そのコードは、実行中の VS バージョンのレジストリ ハイブのパスを検出し、その時点で必要なレジストリ設定を追加できます。だから私は3つの質問があります:

  1. VS の起動時に、拡張機能内で自分が作成したメソッドを実行するにはどうすればよいですか?
  2. 現在の VS レジストリ ハイブのパスを取得するにはどうすればよいですか?
  3. レジストリ情報を追加する他の方法はありますか?
4

3 に答える 3

1

最終的に、単一ファイル ジェネレーターを保持する VSIX の作成をあきらめました。代わりに行ったことについて CodeProject の記事を作成しました。

しかし、まだ VSIX ファイルを作成しようとしていたときに、このブログ投稿が役に立ちました。

于 2013-11-15T03:15:21.937 に答える
0

あなたのvsixには拡張するクラスがありますPackageか?

Initializeパッケージの初期化時に実行されるパッケージのメソッドにコードを追加します。

VS ベースのレジストリにアクセスするには、Microsoft.VisualStudio.Shell.VSRegistryを参照してください。

于 2013-11-12T22:50:21.837 に答える