DotNetの依存関係を解決するための「最初にgacをチェックする」ルールがあると思います。
だから私はこのように私の参照をします。
\MySolution.sln
\BALLayer\Biz.csproj
\DALLayer\Data.csproj
\PresLayer\MyWebsite.csproj
\ThirdPartyReferences\
\ThirdPartyReferences\SuperCoolDll111.dll
\ThirdPartyReferences\SuperCoolDll222.dll
\ThirdPartyReferences\SuperCoolDll333.dll
このように、すべてのcsprojectsは、相対パスを使用して必要なdllを参照します。すべてのcsプロジェクトは同じdllを参照します。
これにより、「あなたが何をしたいかに関係なく、GACを調べる」という問題を回避することができました。
Nugetも同様にこれを行います。
\packages\
\packages\repositories.config
\packages\SomeLibrary\SomeDll.dll
\packages\SomeLibrary\MyNugetDll.dll
およびcsプロジェクトは、相対パスを使用して同じ.dllを参照します。
...........。
脚注:メモ帳で.csprojファイルを開き、HintPathを探します。私はいつも次のようなことを言います
<Reference Include="MyNugetDll.dll>
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\SomeLibrary\MyNugetDll.dll</HintPath>
</Reference>
また
<Reference Include="SuperCoolDll333.dll>
<SpecificVersion>False</SpecificVersion>
<HintPath>..\ThirdPartyReferences\SuperCoolDll333.dll</HintPath>
</Reference>
........。
しかし、あなたの問題の核心は「ローカルコピー」と「gacfirst」ルールだと思います。
........。
PS
注文について説明する別の質問があります...私よりも優れています。
参照されるDLLをロードするために場所が検索される順序は何ですか?
編集::::
だから学んだ教訓:
サードパーティの参照をソース管理にチェックインしていて、ビルドマシンに「xyz.dllが見つかりません」と表示された場合は、dllが実際にソース管理にあることを確認してください。Visual Studioがインストールされた(ローカル開発)マシンには多くの「ブードゥー」パスがあり、その後は「ビルドマシン」にはありません。
nugetを使用してdllをチェックインする場合は、それらがすべてチェックインされていることを確認してください。packages.configに新しいエントリを追加してから、実際のdllをソース管理に配置するのを忘れる可能性があります。
サードパーティのdllではなく、packages.configのみをソース管理に配置するnugetを使用する方法がいくつかあります。それに関する記事については、この投稿のコメントを確認してください。