2011-12-13 108 views
1

我已经在团队城市中建立了一个构建,在测试项目中使用了NuGet包参考。使用NuGet包构建团队城市

我已经使用该文件夹是结构法

\ 
|- Project1 
    \- Project1.csproj 
|- Project1.Test 
\- Project1.Test.csproj 
|- packages 
\- lib 
    \- RhinoMocks 

的PROJECT1项目成功地建立,但测试项目上ResolveAssemblyReferences步骤失败。相对路径似乎不正确。

[13:16:55]: [ResolveAssemblyReference] C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360, 9): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Rhino.Mocks, Version=3.6.0.0, Culture=neutral, PublicKeyToken=0b3305902db7183f, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. 
[13:16:55]: [ResolveAssemblyReference]   For SearchPath "{HintPathFromItem}". 
[13:16:55]: [ResolveAssemblyReference]   Considered "..\packages\RhinoMocks.3.6\lib\Rhino.Mocks.dll", but it didn't exist. 

的TeamCity构建配置:

  • MSBuild任务
  • 构建文件路径:Project1.Test \ Project.Test.csproj
  • 工作目录:%system.teamcity.build.checkoutDir %\ Project1.Test
  • VCS root指向上面文件夹结构的根目录。

至于我可以告诉这可能是一个MSBuild问题,当我在构建代理上的签出文件夹中的命令行上运行MSBuild时遇到同样的错误。

更多信息: 提示路径由Nuget包配置提供。在Visual Studio中,包引用可以正常工作。但是,通过MSBuild运行时,它似乎对当前目录感到困惑。 .. \ packages ...路径实际上是Nuget的逐字引用路径。

回答

0

你有一个混合的引用,具有强大的程序集名称(版本等)和提示路径。如果程序集位于机器上的GAC中,即使提示路径错误,它也会被定位。如果它不在构建机器的GAC中,则无法找到它。检查你的项目文件,并查看引用上的HintPath元数据是否是正确的路径(看起来应该是“.. \ packages \ lib \ RhinoMocks ...”,而不是出现在输出中的内容)

这就是一堆IFS的,任何更多的想法我需要看看有什么发生故障的项目文件中

1

我很困惑你的项目结构的这一部分:

|- packages 
\- lib 
    \- RhinoMocks 

该不该”如果你从NuGet中取出软件包,那么这是必须的。应该检查到源代码控制中的“软件包”下的唯一文件是repositories.config。

另外,当TeamCity运行MSBuild时,你如何下载相关的NuGet依赖关系?是通过TeamCity“NuGet安装程序”还是将您的解决方案/项目配置为自动运行nuget安装?

+0

我会检查你的建议。我不知道应该检查什么,不应该检查什么,也不知道Nuget安装程序的存在。 – benPearce