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.