TFS(2012)Build正在检查C:\ Windows \ Microsoft.NET ...以获取我的一些项目引用,即使dll作为项目引用(设置为copy local)包含在我正在检查的文件夹中英寸
在TFS之外构建,在VS和使用MSBuild.exe命令行都成功。
我可以在错误和警告中看到它所抱怨的引用没有找到'无法解析此引用。找不到......'都是因为它没有检查proj文件中定义的checkin依赖文件夹。
有关如何纠正此问题的任何想法?
答案 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 ::::
经验教训:
如果您将第三方引用检入源代码管理,并且构建机器显示“我找不到xyz.dll”,那么请确保dll实际上在源代码管理中。安装了visual studio的(本地开发)机器上有很多“伏都教”路径,随后不会出现在“构建机器”上。
如果你使用nuget并检查你的dll,请确保它们都已签入。你可以在packages.config中添加一个新条目,然后忘记将实际的dll放入源代码控制中。
有一些方法可以使用nuget,你只将packages.config放在源代码管理中,而不是第三方dll。查看这篇文章的评论,了解相关文章。