我已经在团队城市中建立了一个构建版本,在测试项目中使用了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问题,当我在构建代理程序的checkout文件夹中的命令行运行MSBuild时,我得到了同样的错误。
更多信息: 提示路径由Nuget包配置提供。在Visual Studio中,包引用正常工作。但是,当通过MSBuild运行时,它似乎对其当前目录感到困惑。 .. \ packages ...路径实际上是Nuget的逐字引用路径。
答案 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,我需要了解更多的想法,看看项目文件中的内容是否失败。