【发布时间】:2016-06-24 14:11:34
【问题描述】:
我有 .net 应用程序,我正在尝试从
迁移packages.config 到 project.json 。
当我使用 Vs 2015 构建项目或从命令行手动使用 MsBuild 时,一切正常。当我使用设置在构建服务器上构建它时,问题开始发生:
- .NET 4.51 应用
- MSBuild 14.0.25402.0
- Windows Server 2012
- 已安装 Microsoft Build Tools 2013、2015 RC。
- 没有安装 Visual Studio。
- Nuget 3.4.3.855
在创建 nuget restore project.lock.json 时,包被下载到 user/.nuget/packages ,所以看起来它正在完成这项工作。然后我尝试运行 MSBuild,我得到了很多参考错误:
error CS0246: The type or namespace name 'log4net' could not be found (are you missing a using directive or an assembly reference?)
当我在开发人员机器上使用 MSBuild 时,即使我指向构建服务器目录,我也可以构建这个项目,所以这是 MSBuild 的一个明显问题。我想 Microsoft Build Tools 缺少一些东西,有什么想法吗?
编辑: 看起来 msbuild 在我的开发人员机器上添加了带有所有 nuget 路径的标志/引用,但它没有在构建服务器机器上执行此操作。 示例:
/reference:C:\Users\user\.nuget\packages\log4net\1.2.10\lib\log4net.dll
开发者机器构建项目:
Build started 27/06/2016 13:29:40.
Project "Y:\13dd0660b4e0a7a0\project.Shared.Utilities\project.Shared.Utilities.csproj" on node 1 (default targets).
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+ /reference:C:\Users\username\.nuget\packages\EPPlus\4.0.4\lib\net20\EPPlus.dll
构建服务器 msbuild 构建相同的项目
D:\13dd0660b4e0a7a0\project.Shared.Utilities>"C:\Program Files (x86)"\MSBuild\14.0\Bin\msbuild project.shared.utilities.csproj
Microsoft (R) Build Engine version 14.0.25123.0
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 27/06/2016 12:35:19.
Project "D:\13dd0660b4e0a7a0\project.Shared.Utilities\project.shared.utilities.csproj" on node 1 (default targets).
PrepareForBuild:
Creating directory "bin\Debug\".
Creating directory "obj\Debug\".
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.ComponentModel.DataAnnotations.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Configuration.dll"
这只是日志的一部分 -> 你可以看到 /reference 被传递给第一个脚本
【问题讨论】:
-
您使用的是哪个构建服务器?
-
@AntonSizikov 这是包含两个构建步骤的 Teamcity:1. Nuget 恢复。 2. msbuild 解决方案。在这种情况下这并不重要,因为我尝试从命令行手动执行此操作,但 msbuild 仍然失败并显示相同的消息。因此,这与 teamcity 无关,而是 nuget/msbuild 问题。 MsBuild 不知道如何将 nuget 包加载到项目中。
-
以防万一,能确认一下MSBuild的版本吗?我看到您安装了 MBT 2013...可能是您运行的 MSBuild 版本错误?
-
和仅供参考
project.json有点死了 blogs.msdn.microsoft.com/dotnet/2016/05/23/… -
1.我今天已更新到 Microsoft Build Tools 2015 -> Microsoft (R) Build Engine 版本 14.0.25123.0,它与我在开发人员机器上的 msbuild 完全匹配。 msbuild版本不是这样的,一定是用vs2015安装的东西。 2. 是的,它有点死了,但仍然比带有当前 csproj 的 packages.config 更好。他们计划允许将 project.json 用于 nuget 包,可能具有不同的名称,例如 nuget.json,但概念是相同的。我仅将 project.json 用于 nuget 包
标签: c# visual-studio msbuild nuget