TeamCity - MSBuild无法找到NuGet引用

时间:2012-03-16 09:15:33

标签: msbuild teamcity nuget

试图在TeamCity中构建一个对NuGet包中的程序集有大量引用的C#项目,但在Visual Studio中工作正常。

在日志中找到;

For SearchPath "{HintPathFromItem}".

[13:48:15][ResolveAssemblyReference]         
Considered "..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll", but it didn't exist.

项目文件中的引用是;

<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>

有什么想法吗?它似乎不是从正确的目录开始,因此无法解析存在于.csproj文件上一层的“../packages”。

7 个答案:

答案 0 :(得分:9)

我知道这已经得到了解答,但也许其他人也遇到了同样的问题。

我的项目文件中的提示路径错误地指向包并将其更改为..packages为我修复了它。

所以改变它:

<Reference Include="Newtonsoft.Json">
  <HintPath>packages\Newtonsoft.Json.5.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

对此:

<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.5.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

修正了它。

答案 1 :(得分:6)

自从安装了NuGet软件包以来,我重新构建了我的项目,所以即使'../packages'对于主项目来说是正确的,也不适用于已被移动的其他项目。

卸载并重新安装NuGet包正确地或更直接地写入路径,在每个.csproj文件的路径上执行查找和替换。

答案 2 :(得分:1)

此时我的理解基于以下信息:http://youtrack.jetbrains.com/issue/TW-20525

但我只是同时潜入TeamCity和NuGet(来自CruiseControl.NET)

所以我暂时做的是在我的vs.net解决方案构建步骤之前添加一个“NuGet Installer”构建步骤,一切都很顺利。

答案 3 :(得分:0)

您需要将packages目录添加到源代码控制或启用nuget以自动下载软件包(它是nuget 1.6右键菜单中的一项功能)

请参阅http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

答案 4 :(得分:0)

很抱歉复活这篇旧帖子,但除了以上优点(Tjaart,SeeNoWeevil,Luke)之外,您可能还想查看属性CopyLocal=true以获取您所记录的参考资料。

对于我自己而言,这通常是一个微小的疏忽导致了OP提到的错误。

答案 5 :(得分:0)

确保.dll和.pdb文件包含在源代码管理中(或已下载)。

对于TFS(非TeamCity),默认情况下会排除.pdb个文件和.dll个文件。因此,请仔细检查是否已包含每个包子目录的所有文件,而不仅仅是nuget .xml文件。

背景:我和其他一些海报一样思考这个问题 - .csproj文件中的相对引用可能不正确。在.csproj文件中使用路径后,确保引用对于项目是绝对的...       <HintPath>$(MSBuildProjectDirectory)\..\.nuget\packages\Common.Logging.Core.3.0.0\lib\net40\Common.Logging.Core.dll</HintPath> ..只是为了得到同样的错误,我仔细检查了所需的文件是否存在。我还在我的本地机器上进行了MSBuild构建(而不是Visual Studio构建),并且它工作正常。对构建服务器的进一步调查显示,指定的文件不存在,即使目录和.nuget包.xml文件也存在。

答案 6 :(得分:-1)

您可以在解决方案资源管理器中突出显示该文件,然后转到“属性”,并验证Copy to Output Directory是否设置为True