How to fix DNX/DNVM in Visual Studio 2015?

This is a known issue.

ASP.NET 5: On Windows 7 SP1, DNX SDK cannot be installed without Powershell 3.0.

Symptoms

When you create an ASP.NET 5 project, you receive the following error message:

DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install. The solution will use DNX SDK version 'dnx-clr-win-x86-1.0.0-beta5' for this session

Workaround

To work around this issue, install Windows Powershell 3.0 (or higher) and try to create the project again. To see your current PS version, run $PsVersionTable command (details).

Links:

  • How to Install Windows PowerShell 4.0.
  • Install PowerShell 3.0 on Windows 7.

Install the latest version by opening a console and running:

dnvm upgrade

If you reopen VS you should be able to compile.

If this doesn't work, try deleting the C:\Users\username\.dnx folder. Reopen VS and it will recreate the .dnx folder in the same location with only 2 scripts: bin\dnvm.cmd and bin\dnvm.ps1 Note: This would delete all already installed runtimes.

Rerun dnvm upgrade and check under the project properties if the Solution DNX SDK Version you have matches an installed one.


I am also having this problem. It appears to be related to an issue where the dnvm.ps1 script does not quote the install path. The command dnvm install "C:\Program Files (x86)\Microsoft Web Tools\DNX\dnx-clr-win-x86.1.0.0-beta5.nupkg" from Visual Studio gets recalled as dnvm-install C:\Program Files (x86)\Microsoft Web Tools\DNX\dnx-clr-win-x86.1.0.0-beta5.nupkg, which breaks as the path should be quoted. More information is available on the pull request I opened at:

https://github.com/aspnet/dnvm/pull/357

As a workaround, the solution for me was to change the following in "C:\Program Files\Microsoft DNX\Dnvm\dnvm.ps1". This loops through the arguments, ensuring that any containing whitespace or parenthesis are quoted.

Replace the following line:

$cmdargs = @($args[1..($args.Length-1)])

with:

# Combine arguments, ensuring any containing whitespace or parenthesis are correctly quoted 
ForEach ($arg In $args[1..($args.Length-1)]) {
    if ($arg -match "[\s\(\)]") {
        $cmdargs += """$arg"""
    } else {
        $cmdargs += $arg
    }
    $cmdargs += " "
}

If you are still having issues following making this change, delete C:\Users\username\.dnx and reopen Visual Studio to let Visual Studio recreate the folder.