XML を介した 2 人のカスタム デザイナーを含む VSIX パッケージがあります。このパッケージには、いくつかのカスタム ビルド タスクを使用してビルド時にコードを自動生成するフレーバー プロジェクト システムがあります。
最初に直面した課題は、プロジェクト テンプレートに .targets ファイルをインポートすることでした。パッケージのバージョンが変更され、vsix インストーラーがターゲット マシンのバージョン管理された場所にパッケージをドロップするため、プロジェクト テンプレートの .targets ファイルへの完全修飾パスを指定できません。私が解決できる方法は、パッケージルートパスを使用してユーザー環境変数を追加し、プロジェクトテンプレートでこの環境変数を参照して.targetsファイルをインポートすることでした。警告はありますが、期待どおりに機能します。
注意点は、VSIX 展開プロセス中にこの環境変数を作成する方法です。から派生したカスタム属性でパッケージ クラスを装飾してみましたRegistrationAttribute
。Register メソッドをオーバーライドしてEnvironment.SetEnvironmentVariable()
実行しましたが、開発ボックスでプロジェクトを実行した場合にのみ機能します。どうやら、VSIXInstall.exe は、インストール中に属性レジスタを実行することを気にしません。
誰かがこの問題を解決するためのアプローチを提案できれば素晴らしいことです。私は時間がなくなり、すでに多くのことを試しましたが、成功しませんでした:(