我无法从命令行构建vs2017解决方案,但我可以从IDE构建。一旦我从IDE构建,命令行构建就可以了。因此,ide正在做一些不同的事情 - 我错过了什么?以下是我为命令行构建所做的事情:
nuget.exe restore mysoln.sln
"E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe" /m /t:Rebuild /clp:Summary /p:Configuration=Debug /p:Platform="Any CPU" mysoln.sln
我得到的输出:
"Forms.csproj" (Clean target) (14:3) ->
E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(126,5): error : The current .NET SDK does not support targeting .NET Standard 2.0. Either target .NET Standard 1.6 or lower, or use a version of the .NET SDK that supports .NET Standard 2.0. [E:\wp\Forms.csproj]
我如何才能使命令行构建工作?
==============
我从命令行尝试"E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe" /m /t:Restore GpsConsole.sln
并且它可以工作。但是当jenkins运行完全相同的命令时,我得到了相同的错误
==============
我们建立解决方案的方式是:
nuget.exe restore mysoln.sln
"E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe" /m /t:Restore mysoln.sln
"E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe" /m /t:Rebuild /clp:Summary /p:Configuration=Debug /p:Platform="Any CPU" mysoln.sln
答案 0 :(得分:1)
我相信您的visual studio确实安装了.net core 2.0 SDK,因为它能够构建您的.net标准2.0解决方案。
但是,nuget restore指向visual studio目录中的一个sdk(Visual Studio可以使用的一个sdk,但默认情况下不会安装.net core 2.0 sdk)。
你的.net core 2.0 sdk可能位于C:\ ... \ dotnet \ ...
你想让nuget恢复使用位于该目录内的msbuild,而不是visual studio目录中的那个。
答案 1 :(得分:1)
我建议你重新考虑命令行方法。
您可以使构建脚本独立于Visual Studio安装,使用您想要的MSBuild版本,并在构建服务器上重用。
简短计划
<强>详情
使用构建工具可以让您独立于Visual Studio安装。
从Build Tools for Visual Studio 2017(Visual Studio Downloads page)
下载direct link此处记录的命令行参数:Use command-line parameters to install Visual Studio 2017
此处列出了所有工作负载和组件:Visual Studio Build Tools 2017 component directory
您可以使用PowerShell模块VSSetup
。从此处下载或安装:Github: Microsoft/Visual Studio Setup PowerShell Module
只需使用clean
目标
帮助nuget.exe
使用正确的MSBuild
使用build
目标运行MSBuild(您可以添加其他必需参数)
# 1. Find MS Build
Import-Module $PSScriptRoot\VSSetup\VSSetup.psd1
$msBuildPath = (Get-VSSetupInstance | Select-VSSetupInstance -Version 15.0 -Product Microsoft.VisualStudio.Product.BuildTools).InstallationPath
if ([System.IntPtr]::Size -eq 8)
{
$global:msbuildPath = Join-Path $msBuildPath 'MSBuild\15.0\Bin\amd64'
}
else
{
$global:msbuildPath = Join-Path $msBuildPath 'MSBuild\15.0\Bin'
}
Write-Output "Using MSBuild from $global:msbuildPath"
Write-Output "MSBuild /version"
$msbuild = Join-Path $global:msbuildPath msbuild
& $msbuild /version
# 2. Clean
& $msbuild "$sln_file" /t:Clean /v:q /nologo
# 3. Restore
$nuget = Join-Path $PSScriptRoot "\.nuget\nuget.exe"
& $nuget restore -MSBuildPath $global:msbuildPath
# 4. Build
& $msbuild "$sln_file" /t:Build /v:q /nologo