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

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

新規登録して質問してみよう
ただいま回答率
85.45%
DLL

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

Visual Studio

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

Q&A

解決済

1回答

36644閲覧

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

kurori

総合スコア111

DLL

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

Visual Studio

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

0グッド

0クリップ

投稿2017/02/20 02:12

###前提・実現したいこと
一応、環境情報を。
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化してばら撒くメリットがないのです...

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/02/20 03:00

DLLがどのようなルールで参照されるかはご存知なのでしょうか?もしご存知ない場合、そのルール・仕様については調査されましたか?
kurori

2017/02/20 04:08

YesともNoとも取れる回答になるかもしれませんが...私が調べた結果としては、VSの参照追加で参照可能であるのはGAC登録されているもの、または同一ソリューション下にあるプロジェクトのプライマリ出力である、というように認識しています。ただ、登録方法がそれしかないのであれば、ローカルファイルを参照追加できるという参照マネージャーの機能の説明がつかず、ローカル参照できるならソリューションに対して相対パスで参照できるのでは?と思い質問した次第です。
kurori

2017/02/20 04:25

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

2017/02/20 04:52

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

2017/02/20 05:04

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

回答1

0

ベストアンサー

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

投稿2017/02/20 04:35

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurori

2017/02/20 05:28

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

2017/02/20 06:36

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

2017/02/20 07:08

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

2017/02/20 07:28

参照の追加後に、ソリューションエクスプローラーで参照に追加したDLLを選択すると、参照プロパティのパスにはローカルのフルパスが表示されます。そして、参照マネージャーの最近使用したファイルにも同じパスが表示されます。 いったん閉じて、ソリューションごと別のフォルダーに移動して再度開き直すと、参照プロパティのパスには移動先のフルパスが表示され、参照マネージャーの最近使用したファイルでは移動前のパスが表示されていてチェックが外れています。この状態で参照は通っていて、インテリセンスも効きますし、問題なくビルドできます。 プロジェクトファイル(.csproj)をテキストファイルで開くと、参照に追加したDLLが相対パスで記録されていることが確認できます。
kurori

2017/02/20 07:50

お手数をお掛けして申し訳ありませんでした。 こちらでも同様の手順で確認しておりました。 プロジェクトファイルには確かに相対パスで表記されており、参照マネージャーでもソース取得後のパスでフルパスが表示されておりました。 しかし、 ・ソリューションエクスプローラー上では参照設定は警告表示 ・参照のプロパティの表示上はパスは空 ・ビルドは通らない という状態でした。 プロジェクトファイルの記述が相対である以上、通っても良さそうなのですが... もう少し調べてみます。ありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問