2

TFS (2012) ビルドは、C:\Windows\Microsoft.NET... をチェックして、チェックインしているフォルダーにプロジェクト参照 (ローカルにコピーするように設定) として dll が含まれているにもかかわらず、プロジェクト参照のいくつかをチェックしています。

VS と MSBuild.exe コマンド ラインを使用した TFS の外部でのビルドは成功します。

エラーと警告で、「この参照を解決できませんでした。見つかりませんでした...' はすべて、proj ファイルで定義されているチェックイン依存関係フォルダーをチェックインしていないことが原因です。

これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

2

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をロードするために場所が検索される順序は何ですか?

編集::::

だから学んだ教訓:

  1. サードパーティの参照をソース管理にチェックインしていて、ビルドマシンに「xyz.dllが見つかりません」と表示された場合は、dllが実際にソース管理にあることを確認してください。Visual Studioがインストールされた(ローカル開発)マシンには多くの「ブードゥー」パスがあり、その後は「ビルドマシン」にはありません。

  2. nugetを使用してdllをチェックインする場合は、それらがすべてチェックインされていることを確認してください。packages.configに新しいエントリを追加してから、実際のdllをソース管理に配置するのを忘れる可能性があります。

  3. サードパーティのdllではなく、packages.configのみをソース管理に配置するnugetを使用する方法がいくつかあります。それに関する記事については、この投稿のコメントを確認してください。

于 2013-02-11T15:01:13.773 に答える