VS2005プロジェクトテンプレートの参照設定
プロジェクトテンプレートの参照設定について、検証しました。
プロジェクトから参照するdllの情報をプロジェクトテンプレートに残す方法
Winアプリプロジェクト
- プロジェクトファイルにdll参照パスの設定があればよい。
- プロジェクトにdllへの参照を追加すると、デフォルトでは(プロパティのローカルコピーがTrueなので)ビルド時にdllをbinにコピーしてくる。また、参照に追加したdllが参照するdllもコピーしてくる。
- テンプレートのエクスポート時に、binフォルダの内容は無視される。テンプレートにdllは含まれない。
Webサイト
- Binにdll.refreshファイルがあればよい。テンプレート作成時にdll本体は不要。
- Webサイトにdllへの参照を追加すると、dllをBinにコピーしてくる。また、参照に追加したdllが参照するdllもコピーしてくる。
- Webサイトの場合は、dll本体がBinにある状態でテンプレートを作成すると、テンプレートにdllも入ってしまう。
- dllを削除した状態でテンプレートを作成すると、テンプレートにdllは入らない。*1
プロジェクトテンプレート作成時の注意点
プロジェクトテンプレート作成時、参照するdllが置いてあるドライブ(今回はCとする)と同じドライブで作業を行ってはいけない(プロジェクト/Webサイト双方)
プロジェクトと同じドライブにあるdllを参照すると、Webサイトでは相対パスで参照設定(Binフォルダに相対パスが記載された.refreshファイルが作成)されます。
そのままプロジェクトをテンプレート化すると、参照設定が相対パスとなるため、テンプレートを用いて、Cドライブ以外に作成したプロジェクトは、dllが見つからない状態となります(Cドライブに作っても、階層が深くなると見つからない状態となります)。
Webサイト以外のプロジェクトでも、相対パスで参照設定(プロジェクトファイルにdllの相対パスが記載)されます。その後は同様にdllが見つからない状態となります。
回避策
参照するdllのあるドライブとは別のドライブに、雛形となるプロジェクトを作成して作業する。
ドライブが1つしかない場合には、DOS窓でSUBSTコマンドを使って、仮想ドライブを割り当てる方法で作業できそうです。
SUBST [ドライブレター]: [パス] 例) SUBST E: C:\Edrive