2

TFS (2012) Build 正在检查 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>

…………

但我认为您问题的症结在于“复制本地”和“gac first”规则。

…………

附言

这是另一个讨论订单的问题......比我做得更好。

搜索位置以加载引用的 DLL 的顺序是什么?

编辑::::

所以吸取了教训:

  1. 如果您将第三方引用签入源代码管理,并且构建机器说“我找不到 xyz.dll”,那么请确保该 dll 实际上在源代码管理中。安装了 Visual Studio 的(本地开发)机器上有很多“巫毒”路径,随后将不在“构建机器”上。

  2. 如果您使用 nuget 并签入您的 dll,请确保它们都已签入。您可能会在 packages.config 中添加一个新条目,然后忘记将实际的 dll 放入源代码管理中。

  3. 有一些使用 nuget 的方法,您只将 packages.config 放在源代码管理中,而不是第三方 dll。检查这篇文章的评论以获取有关此的文章。

于 2013-02-11T15:01:13.773 回答