質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • Visual Studio

    2005questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • DLL

    90questions

    DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

外部DLLの参照追加を相対パスで追加したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 8,320

kurori

score 95

前提・実現したいこと

一応、環境情報を。
OS:Windows 10 (x64)
Tool:Visual Studio 2013、VisualStudio2015の2種
言語:C#.Net 及び VB.Net

いくつかのソリューションで使いまわしているDLLファイルが有ります。
そのDLLをソリューションに追加し、参照追加しようとすると、参照マネージャーではローカルパスを指定しなくては当然ながら追加できません。

問題

上記の方法では、例えばソース管理下で複数のユーザーがUserディレクトリ下で作業する際には、ローカルパスを参照し直さなくてはなりません。
これを相対パスに変更することが出来れば、そういった問題を回避できると思っていますが、方法が発見できず困っています。

以下に簡単な再現方法を示します。
(TFSのワークスペースはUser\ユーザー名\Documentsを指しているものとします)
例:
①NewtonsoftからNewtonsoft.Json.dllをダウンロード
②ソリューションに必要なDLLなので、ローカルパス指定で参照追加し、TFSにコミットした。
③他の開発者がTFSからソースを取得すると、②の作業担当者のローカルパスが指定されており、取得段階では参照できなくなっている。

何とか、このソース取得後に参照できない、という問題を回避する方法が無いかと探しております。

試したこと

当たり前ですが、DLLを生成するプロジェクト自体をソリューション下に配置すればプロジェクトのプライマリ出力が追加でき、このパスはソリューションに対して相対パスになるようで参照追加できます。
ただ、それではDLL化してばら撒くメリットがないのです...

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kurori

    2017/02/20 13:25

    追記:「YesともNoとも取れる...」と書いたのは、調査不足の認識がある為です。レジストリにdll参照用のフォルダを追加する方法など、他にもあるようでしたので。そういった更に詳細なルールは追い切れていません。

    キャンセル

  • t_obara

    2017/02/20 13:52

    すいません、早合点しました。環境は.NET環境ですね。開発環境であれば、 reference オプションで指定するというのはいかがでしょうか。

    キャンセル

  • kurori

    2017/02/20 14:04

    早速調べてみます。情報のご提供ありがとうございます。

    キャンセル

回答 1

checkベストアンサー

0

DLLファイルもリポジトリーに納めて、バージョン管理ツールの機能でDLLファイルをC#(VB.NET)プロジェクトのフォルダー内に配置されるようにすれば良いのではないでしょうか。TFSは使ったことがないのですが、たぶんそのような機能はあると思います。
DLLファイルがプロジェクトフォルダー内(サブフォルダーを作っても良い)にあれば、参照の追加で追加したファイルは相対パスで記録されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/20 14:28

    残念ながら、該当DLLをプロジェクトに追加、ソース管理に追加し、掲題の問題にあたっています。
    この方法をとったプロジェクトをTFSから取得すると参照に追加されているDLLのパスが空白になり、ソース管理から取得した時点では警告しまうのです。
    GitHub等であれば相対になったとは思いますが、TFSでは上記の通りです。

    キャンセル

  • 2017/02/20 15:36

    ちょっと確認してみましたが、やはりプロジェクトフォルダー内にDLLファイルがあれば、プロジェクトファイルには相対パスで記録されますね。プロジェクトフォルダーの外でも同じドライブ内なら相対パスですね(これは今知りました……)。ソリューションを閉じて別のフォルダーに移動させてから開き直すと、DLLのパスがちゃんと移動先のパスになっています。

    TFSを使ったからといってその挙動が変わるとは思えないのですが。すみません。TFSは使ったことがなく、使える状況にもないのでこれ以上は判りません。

    キャンセル

  • 2017/02/20 16:08

    わざわざ確認頂きありがとうございます。恐縮です。
    その環境でご確認頂きたいのですが、参照マネージャーで対象のDLLを確認した場合、どこに追加されていますでしょうか?
    こちらでは参照 -> 最近使用したファイル にローカルのフルパス指定で表記されています。
    ご確認頂いた内容通りなら、おそらくここの表記パスか参照の追加先の項目に差が有りそうです。

    キャンセル

  • 2017/02/20 16:28

    参照の追加後に、ソリューションエクスプローラーで参照に追加したDLLを選択すると、参照プロパティのパスにはローカルのフルパスが表示されます。そして、参照マネージャーの最近使用したファイルにも同じパスが表示されます。

    いったん閉じて、ソリューションごと別のフォルダーに移動して再度開き直すと、参照プロパティのパスには移動先のフルパスが表示され、参照マネージャーの最近使用したファイルでは移動前のパスが表示されていてチェックが外れています。この状態で参照は通っていて、インテリセンスも効きますし、問題なくビルドできます。

    プロジェクトファイル(.csproj)をテキストファイルで開くと、参照に追加したDLLが相対パスで記録されていることが確認できます。

    キャンセル

  • 2017/02/20 16:50

    お手数をお掛けして申し訳ありませんでした。
    こちらでも同様の手順で確認しておりました。
    プロジェクトファイルには確かに相対パスで表記されており、参照マネージャーでもソース取得後のパスでフルパスが表示されておりました。

    しかし、
    ・ソリューションエクスプローラー上では参照設定は警告表示
    ・参照のプロパティの表示上はパスは空
    ・ビルドは通らない
    という状態でした。

    プロジェクトファイルの記述が相対である以上、通っても良さそうなのですが...
    もう少し調べてみます。ありがとうございますm(__)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Visual Studio

    2005questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • DLL

    90questions

    DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。