Visual Studio:相対アセンブリ参照パス


96

ソリューションディレクトリ内にあるアセンブリへの参照を追加する場合、それを相対的に追加する方法はありますか?リポジトリにチェックインおよびチェックアウトすると、プロジェクトで正しく参照されますか?


13
UIからうまく機能しない場合は、.projファイルを直接手動で編集して、パスを相対パスに変更できることを覚えておいてください。どちらかの方法で変更すると、それはあなたがそれを置いた方法のままです。
Pavel Minaev 2009

1
Visual Studio 2010では、参照パスはデフォルトで相対パスとして保存されるため、これが発生している場合は他の問題が発生しています。私の場合、バージョン管理からdllを無視して、ソリューションをコンパイルできましたが、同僚はできませんでした。
Giles Roberts

回答:


124

Pavel Minaevの元のコメントを拡張するには-Visual StudioのGUIは、.slnが相対参照のルートであることを前提として、相対参照をサポートしています。したがって、ソリューションがある場合C:\myProj\myProj.sln、サブフォルダに追加した参照はC:\myProj\、相対参照として自動的に追加されます。

などの別のディレクトリに相対参照を追加するC:/myReferences/myDLL.dllには、次の手順を実行します。

  1. ソリューションエクスプローラーでプロジェクトを右クリックし、[ 参照の追加...]を選択して、Visual Studio GUI に参照追加します。
  2. この参照が存在する* .csprojを見つけて、テキストエディターで開きます。
  3. <HintPath>を次と等しくなるように編集します

    <HintPath>..\..\myReferences\myDLL.dll</HintPath>

これはを参照しC:\myReferences\myDLL.dllます。

お役に立てれば。


20
私はこれが参考にして、正しいですが、VSのGUIがないことを理解し、真剣に相対参照を追加するための方法を提供していませんか?
kdbanman 2015

4
VS 2015では、この動作をデフォルトで取得しました(相対パス)
Mugen

2
好奇心からあなたの指示に従うまで、それは絶対的な道を追加したと確信していました。VSは参照プロパティに絶対パスを示しましたが、<HintPath>はすでに相対パスとして示されていました。私はファイルO_o lolimaderpが欠落していたことがわかりました!
donutguy640 2017

@ donutguy640それも私を混乱させました。また、プロパティペインに相対パスを表示する必要があります
Alexander Derck

1
プロジェクトファイルを直接編集する必要はありません。参照の追加ダイアログで「参照」を選択し、プロジェクトファイルのあるフォルダーに移動して、DLLへの相対パスを追加します。プロパティウィンドウには絶対パスが表示されますが、相対パスはプロジェクトファイルに保存されます。VSは、プロジェクトファイルに保存されるのと同じように、パスを表示する必要があります。
必要なもの

9

はい、lib /のようなソリューションにディレクトリを作成し、ファイルシステムのそのディレクトリにdllを追加して、プロジェクトに追加します(追加->既存のアイテム-> etc)。次に、プロジェクトに基づいて参照を追加します。

私はこれをsvnとcvsの下で数回行っています。


5
プロジェクト自体にDLLを追加する必要はなく、参照を追加するだけです。最善の方法は、「lib」ディレクトリ全体をソース管理に追加することです。例としてcode.google.com/p/projectpilot/source/browse/#svn/trunkを参照してください
Igor Brejc 2009

1
あなたが正しいです。古いプロジェクトをチェックしたところ、ディレクトリもDLLもプロジェクト自体に追加されず、リポジトリに追加されました。そして、参照はプロジェクトに関連しています。申し訳ありません。
フレディ

3

VS 2017では自動です。だからAdd Referenceいつものように。

Reference Properties絶対パスで表示.vbproj/.csprojされていますが、相対パスが使用されていることに注意してください。

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>

2

おそらく、これを実現する最も簡単な方法は、アセンブリに参照を追加してから、対応するVisual Studioプロジェクトファイル(拡張子.csproj)の参照のテキスト表現に(手動で)パッチを適用して、相対になるようにすることです。

私は何回も問題なくVS 2005でこれを何度も行ってきました。


3
プロジェクトファイルを手動で変更する必要はないと思います。私の経験では、Visual Studioは常に相対パスを使用します。手作業でプロジェクトファイルを変更する必要があったのは、キーファイル(.snk)を共有したいときだけでした。Visual Studioは常にキーファイルをプロジェクトディレクトリにコピーするだけで、キーファイルのコピーがいくつか作成されます。
Stefan Egli

1

私はここから外れているかもしれませんが、答えは非常に明白であるようです:プロジェクトプロパティの参照パスを見てください。私たちのセットアップでは、次のように、共通リポジトリフォルダーを参照パスGUIウィンドウに追加しました

VS20xxの参照パス

そうすれば、dllを(発行の準備ができて)このフォルダーにコピーでき、このフォルダーからビルドするたびに、すべての開発者が更新されたDLLを取得できます。

DLLがソリューションで見つかった場合、ビルダーは公開されたチームバージョンよりもローカルバージョンを優先する必要があります。


残念ながら、これはcsproj.userファイルに保持されており、相対的ではありません。
Jamie Kitson

0

前述のように、プロジェクトの.csprojファイルを手動で編集して手動で適用できます。

また、Visual Studio 2013が参照ヒントパスに相対パスを適用しようとしていることにも気付きました。これは、おそらくプロジェクトファイルを移植しやすくするためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.