TFS (2012) Build 正在检查 C:\Windows\Microsoft.NET... 以获取我的一些项目引用,即使这些 dll 作为项目引用(设置为复制本地)包含在我正在签入的文件夹中。
在 VS 和使用 MSBuild.exe 命令行的 TFS 之外构建成功。
我可以在错误和警告中看到它抱怨的引用没有找到“无法解决此引用。找不到...'都是因为它根本没有签入 proj 文件中定义的签入依赖文件夹。
关于如何纠正这个问题的任何想法?
TFS (2012) Build 正在检查 C:\Windows\Microsoft.NET... 以获取我的一些项目引用,即使这些 dll 作为项目引用(设置为复制本地)包含在我正在签入的文件夹中。
在 VS 和使用 MSBuild.exe 命令行的 TFS 之外构建成功。
我可以在错误和警告中看到它抱怨的引用没有找到“无法解决此引用。找不到...'都是因为它根本没有签入 proj 文件中定义的签入依赖文件夹。
关于如何纠正这个问题的任何想法?
我相信 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”规则。
…………
附言
这是另一个讨论订单的问题......比我做得更好。
编辑::::
所以吸取了教训:
如果您将第三方引用签入源代码管理,并且构建机器说“我找不到 xyz.dll”,那么请确保该 dll 实际上在源代码管理中。安装了 Visual Studio 的(本地开发)机器上有很多“巫毒”路径,随后将不在“构建机器”上。
如果您使用 nuget 并签入您的 dll,请确保它们都已签入。您可能会在 packages.config 中添加一个新条目,然后忘记将实际的 dll 放入源代码管理中。
有一些使用 nuget 的方法,您只将 packages.config 放在源代码管理中,而不是第三方 dll。检查这篇文章的评论以获取有关此的文章。