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

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

ただいまの
回答率

90.10%

ローカルの DLL の参照設定を他のプロジェクトから参照された場合に引き継ぎたい

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 281

okaryu

score 23

ローカルの DLL を参照しているプロジェクトを他のプロジェクトから参照した場合に、ローカルの DLL の参照設定を引き継ぐことはできないでしょうか?

構成としては以下のようなイメージです。

my_solution.sln
    |-- ProjectAAA
    |    |-- 参照
    |        - ローカルの DLL
    |
    |-- ProjectBBB
    |    |-- 参照
    |        - ProjectAAA
    |        - ローカルの DLL // この参照設定をしないと起動時にエラー
    :

一つのソリューションの中に ProjectAAA と ProjectBBB が存在し、 ProjectAAA はローカルに存在するの DLL を参照しています。ローカルに配置してある DLL は Nuget で取得できなかったパッケージのイメージです.

この ProjectAAA を ProjectBBB で参照する場合、ProjectBBB にもローカルの DLL への参照を設定しないといけないため困っています。

使用している VisualStadio のバージョンは「Microsoft Visual Stadio Professinal 2017 Version 15.7.6」です。

ご存知の方がおられましたら、ご教授ください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • hihijiji

    2019/07/25 11:39

    そのDLLをNuGetに登録はできないのですか?

    キャンセル

  • okaryu

    2019/07/25 11:58 編集

    ちょっとなかった発想でした。指摘いただき、ありがとうございます。社内ローカルの nuget サーバ作って...とかだったらいけるかもしれないですね。

    ただ、今回の質問としては、あくまでローカルの DLL を参照するときの話に限らせてください。

    キャンセル

  • hihijiji

    2019/07/25 12:05

    NuGetが便利すぎて、DLL周りの苦労はすっかり忘れてしまっている今日この頃です。
    配布、再配布の問題がなければ公開しちゃうのが一番手っ取り早いのですが…

    キャンセル

回答 2

checkベストアンサー

0

一つのソリューションに含まれる複数のプロジェクトで、NuGet の同じパッケージを使いたいということなら、このような方法はどうでしょうか?

visual-studio – 複数のプロジェクトとソリューションにまたがる共有NuGetパッケージ

追記

NuGet にあるようです。

WPF のビヘイビアーが入ってる Blend SDK for Visual Studio が Visual Studio 2019 で消えた件について

Microsoft.Xaml.Behaviors.Wpf

追記

あくまで NuGet は使わないということであれば、csproj を書き換えて参照を加えるツールを作るのも一つの方法かと思います。XML なので書き換えるのは簡単です。ItemGroup の中に Reference を追加してください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/25 11:32 編集

    回答ありがとうございます。

    現状、問題となっているのは Nuget から取得できないパッケージに関してです。
    具体的には Microsoft.Expression.Interactions.dll です。以下のサイトを参考に DLL を取得し参照を試みました。

    http://www.nuits.jp/entry/blend-sdk-for-vs2019

    この方法により、ローカルに DLL を配置し無事に参照できるようになりました(↑の例だと ProjectAAA )。
    しかし、違うプロジェクト(↑の例だと ProjectBBB)から、その DLL を使ったプロジェクト(ProjectAAA)を参照しようとすると、同時に DLL への参照も設定しないとエラーになってしまうことがわかりました。

    今後、ローカルの DLL を使ったプロジェクト(ProjectAAA)を参照するプロジェクトが増えるたびに、セットで DLL への参照も追加しなければなりません。

    このままでは、保守性がよくないので自動で参照の設定が行われるような手段を模索しています。

    キャンセル

  • 2019/07/25 12:03

    今回は場当たり的な方法を提案しましたが、本来であれば Microsoft.Expression.Interactions.dll を必要としないはずのプロジェクトで参照が必要になるということは、隠蔽がうまくいっていないということで、設計を見直すことをまず考えるべきではないかと思います。

    キャンセル

0

たぶんビルド出力先に特定のDLLのコピーしたい、という意味だと思うので、いくらでも方法はありそうですけど、例えばビルド後イベントでコピーする処理を書くとか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/07/25 11:39 編集

    回答ありがとうございます。

    実際の作業としては、
    「ローカルの DLL を使ったプロジェクトを参照する場合、DLL への参照もセットで行う」
    というだけなので、今回に限った話でいえば解決はしています。

    しかし、今後、
    「プロジェクトを参照する場合、そのプロジェクトがローカルの DLL を使用していないか確認し、使用していた場合、セットで DLL への参照も追加しなければならない」
    となると、保守性がよくないので自動で参照の設定が行われるような手段を模索しています。

    キャンセル

  • 2019/07/25 15:41

    あぁ、なるほど。
    本来はそのような事が起こらないように設計すべきですが、別の方策としてはその参照されるプロジェクトをnugetパッケージにしてローカルのnugetリポジトリに置くようにして、直接のプロジェクト参照を禁止する、とかいう方法もありそうですね。(思いつきレベルなので面倒そうだし思考の穴があるかもしれませんが)

    キャンセル

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

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