101
votes

I have a project created in Visual Studio, 2013.

The project file has the following properties:

ToolsVersion="12.0", PlatformToolset = v120.

I have Visual Studio 2013 and Microsoft Build Tools 2015 installed. This project gets successfully built using MSBuild 12.0. Upon the attempt to build it with MSBuild 14.0 I get an error

MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. 

As I understand, the problem is that the variable VCTargetsPath doesn’t get evaluated. If I specify the variable VCTargetsPath before the build (with the value C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120), the problem is solved.

However, this approach is not very convenient in case the path is different. Is it possible to somehow solve the problem in a more optimal way?

The registry key and its value:

HKLM\Software\WOW6432Node\Microsoft\MSBuild\ToolsVersions\12.0\VCTargetsPath $([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V120\'))
14
Upon the attempt to build it with MSBuild 14.0 how exactly do you do that? You should probably call vcvars.bat (or equivalent for build tools 2015) first..stijn
Agree with stijn, please set the Path and Environment Variables for Command-Line Builds via vcvars.bat and check if it works for you. For more information about set the Path and Environment Variables for Command-Line Builds, please refer to: msdn.microsoft.com/en-us/library/f2ccy3wt.aspxZhanglong Wu - MSFT

14 Answers

69
votes

It took me two hours to fix this problem, but I finally finished.

The following solved my problem:

  1. Run this on an elevated command prompt (admin): npm install --global --production windows-build-tools. If you don't have npm I recommend installing it, otherwise this won't work.
  2. Change ownership in the install dir (in my case C:\Program Files (x86)\MSBuild\14.0) to your user, instead of admin. (properties>Security>Advanced).
45
votes

I recently reinstalled Visual studio 2017 and encountered this issue while trying to install "npm java". The fix for me is:

  1. set ms version to 2017: npm config set msvs_version 2017
  2. set VCTargetsPath environment variable to C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets
  3. run command console as system administrator
24
votes

These steps solved my issue:

  1. Run npm install --global --production windows-build-tools
  2. Run npm install --save nan
  3. Set VCTargetsPath environment variable to C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140
12
votes

For those the above answer does not work, here is another possible solution to look at.

Even the installation of build tools or VS 2015 did not work for me. So I tried installing below directly via PowerShell (as admin)

https://chocolatey.org/packages/visualcpp-build-tools/14.0.25420.1 Command: choco install visualcpp-build-tools --version 14.0.25420.1

Once this was installed, set an environment variable VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140

11
votes

For those using VS 2019:

set VCTargetsPath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v160"

Edit (Sep 2020): Sometimes it requires a trailing backslash (as bmiller mentioned below)

7
votes

I solved this by:

  1. Set VCTargetsPath environment variable to C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140
  2. build using admin
2
votes

I could not make it work with all the suggestions on this page

I downgraded nodejs to 10.15 and it worked fine

probably not the best answer but it works

2
votes

When running MSBuild outside of Visual Studio 2019 (migrated from 2012), I had these kinds of problems. I solved them running this MSBuild:

"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\msbuild"

(customize it based on your VS version and target architecture) instead of this one:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild

that I was using when I had Visual Studio 2012.

0
votes

I tried npm install and VCTargetsPath, all not work. Finally solved after it after upgrading visual studio to the latest version.

0
votes

Resolved by installing Visual Studio Express 2015 for Windows 10.

0
votes

I solved the problem by loading the solution in VS 2019 instead of double-clicking the solution name in File Explorer.

0
votes

This happened for me when I used node version 14.15.3, install Node Version Manager, install lower Node version (8.x.x for example), switch to it and that should solve the issue.

-1
votes

Make sure to use --global with the command in order to be able to use this package anywhere. This solves the issue for me

-1
votes

While checking the .vcxproj file, I noticed the ToolsVersion was missing. I added it and it solves the issue.

Before :

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

After :

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">