2011-07-08 11 views
2

私はVSIXパッケージにXMLを介してカスタムデザイナーのカップルを持っています。このパッケージには、カスタムビルドタスクを使用してビルド時に自動的にコードを生成する風味のプロジェクトシステムがあります。VSIX Flavoredプロジェクトのカスタム.targetファイルインポートの問題

私が直面しなければならなかった最初の課題は、プロジェクトテンプレートで.targetsファイルをインポートすることでした。パッケージのバージョンが変更され、vsixインストーラがターゲットマシンのバージョンアップされた場所にドロップするため、プロジェクトテンプレートの.targetsファイルへの完全修飾パスを指定できません。私が解決できる方法は、パッケージのルートパスを持つユーザー環境変数を追加し、この環境変数をプロジェクトテンプレートで参照して.targetsファイルをインポートすることでした。期待通りに動作します。

ここで注意すべき点は、VSIXの展開プロセス中にこの環境変数をどのように作成できるかです。私はRegistrationAttributeから派生したカスタム属性でパッケージクラスをデコレートしようとしました。 Environment.SetEnvironmentVariable()を実行するためにRegisterメソッドをオーバーライドし、私の開発ボックスでプロジェクトを実行するときにのみ動作します。どうやら、VSIXInstall.exeはインストール中に属性レジスタを実行しても構いません。

誰かがこの問題を解決する方法を提案できれば嬉しいです。私は時間が不足していると、既に任意の成功:(

答えて

2

ずにたくさんのことを試しています[メールで尋ねたこれと同じ質問に対する私の以前の回答を含む。] VSIXを介して配信

のMSBuildターゲット/タスクがでサポートされていません。 Visual Studio 2010. MSI(または同様のデプロイメントテクノロジ)を使用して、%ProgramFiles%\ MSBuildの下で目的のファイルを任意のディレクトリにドロップすることをお勧めします。プロジェクトテンプレートで$(MSBuildExtensionsPath )

VSIXのインストールは、基本的にVSIXの「解凍」だけです。それだけで登録やカスタム操作を行うことはできません。ビルド時に、VSIXに含まれているpkgdefファイルを作成するために、CreatePkgDef.exeという名前のツールが実行されています(アセンブリをロードしてRegistrationAttributeを呼び出します)。私はあなたが以下のいずれかを実行する必要があると思う

  1. VSIXを放棄し、展開するために(推奨されるアプローチを)MSIを使用
  2. は、カスタムターゲットプロジェクトテンプレートでを含めます。ターゲットが1つの場所にインストールされるのではなく、プロジェクトの中に散在しているので、これは悪いことですが、それはあなたに受け入れられる解決策かもしれません。
  3. VS内のパッケージ/拡張機能の「最初の起動」で初期化(環境変数の設定など)を行います。これはもちろん、ユーザーがこれがインストール後に必要なステップであることを知る必要があることを意味します。

私はこれらの解決策のどれも理想的ではないことを認識しています。 VSIXでのMSBuildのサポートが最優先の機能であることをご理解いただき、誠にありがとうございます。

+0

アーロン、これは今VS2013で簡単ですか? VSIX、カスタムターゲット/ msbuildで状況が改善されましたか? – Vin

関連する問題