Msbuild 使用NuGet包构建团队城市

Msbuild 使用NuGet包构建团队城市,msbuild,continuous-integration,teamcity,nuget,Msbuild,Continuous Integration,Teamcity,Nuget,我已经在TeamCity中建立了一个构建,在测试项目中有一个NuGet包引用 我使用的文件夹结构是 \ |- Project1 \- Project1.csproj |- Project1.Test \- Project1.Test.csproj |- packages \- lib \- RhinoMocks Project1项目成功构建,但测试项目在ResolveAssemblyReferences步骤失败。相对路径似乎不正确 [13:16:55]: [ResolveAsse

我已经在TeamCity中建立了一个构建,在测试项目中有一个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根指向上面文件夹结构的根
据我所知,这可能是MSBuild问题,在生成代理上的签出文件夹中的命令行上运行MSBuild时,我遇到了相同的错误

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

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


这是一堆ifs,如果有更多想法,我需要查看项目文件中失败的内容。

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


这是一堆假设,要想了解更多的想法,我需要了解项目文件中失败的地方。

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

|- packages
 \- lib
  \- RhinoMocks
如果要从NuGet中提取包,则不需要这样做。“包”下唯一应该签入源代码管理的文件是repositories.config


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

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

|- packages
 \- lib
  \- RhinoMocks
如果要从NuGet中提取包,则不需要这样做。“包”下唯一应该签入源代码管理的文件是repositories.config


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

我将查看您的建议。我不知道应该和不应该签入什么,也不知道是否存在nuget安装程序。我将查看您的建议。我不知道应该和不应该签入什么,也不知道是否存在nuget安装程序。