我安装了Visual Studio 2013 Pro的Windows安装,以及当前版本的Python,node和npm。
我正在尝试安装pg
npm包,但它需要本机构建并且失败:
C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ Microsoft.Cpp.Platform.targets(64,5): 错误MSB8020:Visual Studio 2012的构建工具(平台 无法找到Toolset ='v110')。使用v110构建进行构建 工具,请安装Visual Studio 2012构建工具。或者, 您可以通过选择以升级到当前的Visual Studio工具 项目菜单或权利 - 单击解决方案,然后选择“升级解决方案...”。 [C:\用户\亚伦\应用程序数据\漫游\ NPM \ node_modules \ PG \建立\ binding.vcxproj]
我似乎无法找到所描述的Visual Studio 2012的构建工具,我当然更愿意不需要为此需要安装VS2012。有没有办法强制安装和构建使用可用的2013编译器/工具,而无需更改包的代码?
我找不到任何描述此特定问题的人和使用我的Googlefu的解决方案。
答案 0 :(得分:17)
我的Windows 8.1(64位)专业版只安装了Visual Studio 2013(没有以前版本的VS,尽管SQL Server 2014附带了一些组件)。 npm install
命令失败并出现类似错误。
所以我试着指定VS版
npm install --msvs_version=2013 <package>
它使用Platform Toolset'v120'正确启动,但构建失败并出现以下错误(请注意目标路径中使用的V110
):
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets(44,5): error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build using the v120 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install v120 to build using the v120 build tools.
我转到路径c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\
,发现有两个子文件夹:V110
和V120
。
要纠正用于目标的路径,我必须像这样设置环境变量:
set VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
然后安装了包。
供参考,版本:
VS 2013 Premium
Python 2.7.8
C:\Windows\system32>npm version
{ http_parser: '1.0',
node: '0.10.29',
v8: '3.14.5.9',
ares: '1.9.0-DEV',
uv: '0.10.27',
zlib: '1.2.3',
modules: '11',
openssl: '1.0.1h',
npm: '1.4.14' }
答案 1 :(得分:10)
帮助我的是指定环境变量 GYP_MSVS_VERSION 以使用正确的对象 您可以在运行npm之前在控制中心或控制台中进行设置,因此对于2013年它是
set GYP_MSVS_VERSION=2013
并且2015年使用
set GYP_MSVS_VERSION=2015
使用免费的VS 2013或2015社区版本应该是最简单的方法。
PS
我相信VS 2013 Express应该使用
set GYP_MSVS_VERSION=2013e
其中 e 告诉npm使用快速版
答案 2 :(得分:3)
将node-gyp
更新为最新版本(1.0.2):npm install node-gyp -g
请注意,您还必须update the node-gyp
that is internally used by node
现在,node-gyp
将支持您的Visual Studio 2013 - 您可以使用<npm-cache>/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py
方法检入_CreateVersion
。
然而,本机模块仍然无法构建,会出现一些包含文件丢失的错误(来自Windows SDK的文件,比如说winsock2.h
)。这是因为Visual Studio 2013与7.1A SDK捆绑在一起作为默认值。但默认的工具集设置是&#39; v120&#39;,它需要8.1 SDK(需要另外安装)。
要使用VS 2013的库存进行构建,您需要更改正在选择的工具集。您可以修改~/.node-gyp/common.gypi
文件(从here获取的想法),并将工具集更改为&#39; v120_xp&#39;相反(将使用捆绑的7.1A SDK):
{
...
'target_defaults': {
...
'configurations': {
...
'Release': {
'conditions': [
['target_arch=="x64"', {
'msvs_configuration_platform': 'x64',
'msbuild_toolset': 'v120_xp' <--- THIS LINE!
}],
}
}
}
}
Voila - 现在本机npm模块将使用Visual Studio 2013安装库存进行编译!
答案 3 :(得分:3)
npm config set msvs_version 2013 --global
答案 4 :(得分:0)
我与VS2015有类似的错误,但设置了msvs参数:
npm install --msvs_version=2015
没有解决问题。无论我做了什么,我都能看到它正在寻找工具集的错误位置。
长话短说我了解到MSBuild现在已与Visual Studio打包在一起,不再与.NET打包在一起。果然我在PATH变量中有这个条目:
C:\Windows\Microsoft.NET\Framework\v4.0.30319;
因此调用了错误的(旧的)MSBuild版本。我删除了这个条目并添加了以下与VS2015相关的路径:
C:\Program Files (x86)\MSBuild\14.0\Bin\
问题解决了。