试图在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”。
答案 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)
对于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