TFS构建失败,因为它似乎在寻找错误的引用位置

时间:2013-02-11 14:46:30

标签: c# tfs visual-studio-2012 tfs2012

TFS(2012)Build正在检查C:\ Windows \ Microsoft.NET ...以获取我的一些项目引用,即使dll作为项目引用(设置为copy local)包含在我正在检查的文件夹中英寸

在TFS之外构建,在VS和使用MSBuild.exe命令行都成功。

我可以在错误和警告中看到它所抱怨的引用没有找到'无法解析此引用。找不到......'都是因为它没有检查proj文件中定义的checkin依赖文件夹。

有关如何纠正此问题的任何想法?

1 个答案:

答案 0 :(得分: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(s)和相对路径。 所有cs项目都引用了SAME 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>

OR

<Reference Include="SuperCoolDll333.dll>
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\ThirdPartyReferences\SuperCoolDll333.dll</HintPath>
</Reference>

.........

但我认为你的问题的关键是“复制本地”和“gac first”规则。

.........

PS

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

In what order are locations searched to load referenced DLLs?

EDIT ::::

经验教训:

  1. 如果您将第三方引用检入源代码管理,并且构建机器显示“我找不到xyz.dll”,那么请确保dll实际上在源代码管理中。安装了visual studio的(本地开发)机器上有很多“伏都教”路径,随后不会出现在“构建机器”上。

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

  3. 有一些方法可以使用nuget,你只将packages.config放在源代码管理中,而不是第三方dll。查看这篇文章的评论,了解相关文章。