概要:
特定の DLL を追加するときに、DTE を使用して [参照の追加] ダイアログの動作を複製する必要があります (CSProj ファイルの参照にヒント パス エントリが追加されます)。
**注: 関連するが重複していない別の投稿があります: https://stackoverflow.com/questions/6690655/visual-studio-2010-add-in-how-to-get-a-references-この問題の詳細については、ヒント パス プロパティもお読みください。私は今、これに対する答えを得るためにまともな報奨金を追加しました。
これまでの話:
DTE を使用してプログラムでプロジェクト参照を直接 DLL 参照に変換しています。
(子プロジェクト)を参照する(親プロジェクト)を使用Project2
した単純なソリューションがあると仮定すると、次のように変更します。Project1
project1Reference = FindProjectReference(project2.References, project1);
project1Reference.Remove();
Reference dllReference = project2.References.Add(project1DllPath);
ここで、project1DllPath は"c:\somewhere\Project1\Bin\Debug\Project1.dll"
ファイルを参照します。
私がまだ解決できない問題は、新しい参照がへ
ではなく"c:\somewhere\Project1\Bin\Debug\Project1.dll"
、代わりに指している
"c:\somewhere\Project2\Bin\Debug\Project1.dll"
(そしてファイルがそこにコピーされる) ことです。
[参照の追加] メニューを使用して DLL を直接または手動で追加すると、このコピーは行われません。
既存のプロジェクトの DLL への DLL 参照を、コピーを取得して代わりに参照せずに追加するにはどうすればよいですか?
Add の後に追加しようとしdllReference.CopyLocal = false;
ましたが、フラグを設定する以外は違いはありませんでした。作成後にパスを変更するオプションはないようです。
更新: Project2 から Project1 へのビルドの依存関係をプログラムで削除しようとしましたが、効果はありませんでした。
以下は、csproj ファイルの違いです。
プロジェクトとして:
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj">
<Project>{86B3E118-2CD1-49E7-A180-C1346EC223B9}</Project>
<Name>ClassLibrary1</Name>
</ProjectReference>
</ItemGroup>
DLL 参照として (パスが完全に失われました):
<ItemGroup>
<Reference Include="ClassLibrary1, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
...
</ItemGroup>
手動で参照される DLL として:
<ItemGroup>
<Reference Include="ClassLibrary1, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\ClassLibrary1\bin\Debug\ClassLibrary1.dll</HintPath>
</Reference>
...
</ItemGroup>
DLL参照のヒントパスを指定できることがポイントのようです。DLL 参照にヒント パスを設定するにはどうすればよいですか (参照プロパティへのハンドルしかないと仮定します)。
詳細情報 (2011 年 7 月 20 日):
以下のMuse VSExtensionsからの提案は、DLL のプロジェクト BIN から親プロジェクトの BIN フォルダーへのコピーが既に作成されているため、問題の DLL には影響しません。親プロジェクトは、出力フォルダーに子 DLL が既にあるため、参照パスを使用する必要はありません。
また、プロジェクトのファイルは、プロジェクトの .csproj ファイルではなく、プロジェクトの.csproj.user ファイルにReference Paths
保存されます。