使用NuGet包构建城市

时间:2011-12-13 00:16:53

标签: msbuild continuous-integration teamcity nuget

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

我使用的文件夹结构是

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

Project1项目成功构建,但Test项目在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问题,当我在构建代理程序的checkout文件夹中的命令行运行MSBuild时,我得到了同样的错误。

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

2 个答案:

答案 0 :(得分:1)

我对项目结构的这一部分感到困惑:

|- packages
 \- lib
  \- RhinoMocks

如果您从NuGet中提取包裹,则不需要这样做。应该检查到源代码管理中的“软件包”下的唯一文件是repositories.config。

此外,当TeamCity运行MSBuild时,您如何下载相关的NuGet依赖项?是通过TeamCity“NuGet Installer”还是您已将Solution / Projects配置为自动运行nuget install?

答案 1 :(得分:0)

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

这是一堆ifs,我需要了解更多的想法,看看项目文件中的内容是否失败。