diff --git a/NuGet.Config b/NuGet.Config index e6d5e4fce7f3..600a375c7e4a 100644 --- a/NuGet.Config +++ b/NuGet.Config @@ -1,7 +1,7 @@  - + \ No newline at end of file diff --git a/README.md b/README.md index b5abab8ce4f5..d705a8835e26 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The Home repository is the starting point for people to learn about ASP.NET vNex ASP.NET vNext is being actively developed by the ASP.NET team assigned to the Microsoft Open Tech Hub and in collaboration with a community of open source developers. Together we are dedicated to creating the best possible platform for web development. -The samples provided in this repo are designed to show some of the features of the new framework and to provide a starting point for further exploration. The NuGet.config file in the repo points to a MyGet feed (https://www.myget.org/F/aspnetmaster/) that has all the packages being developed. This feed is updated with each preview release. To try out the latest bits under development use the dev feed instead (https://www.myget.org/F/aspnetvnext). +The samples provided in this repo are designed to show some of the features of the new framework and to provide a starting point for further exploration. The NuGet.config file in the repo points to a MyGet feed (https://www.myget.org/F/aspnetvnext/) that has all the packages being developed. This feed is updated with each preview release. To try out the latest bits under development use the dev feed instead (https://www.myget.org/F/aspnetvnext). ## Contents @@ -42,7 +42,7 @@ The first thing we need to do is setup the tools required to build and run an ap #### Windows To install KVM on Windows run the following command, which will download and run a script that installs KVM for the current user (requires admin privileges): ```powershell -@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.ps1'))" +@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/dev/kvminstall.ps1'))" ``` After the script has run open a new command prompt to start using KVM. @@ -52,7 +52,7 @@ To install KVM and the correct version of Mono on OS X using [Homebrew](http://b * Install [Homebrew](http://brew.sh) if it is not already installed. * Run command `brew tap aspnet/k` to tap the ASP.NET vNext related git repositories. - * Run command `brew install kvm` to install KVM. This also automatically install the latest KRE package from https://www.myget.org/f/aspnetmaster/api/v2 feed. + * Run command `brew install kvm` to install KVM. This also automatically install the latest KRE package from https://www.myget.org/f/aspnetvnext/api/v2 feed. * Run command `source kvm.sh` on your terminal if your terminal cannot understand kvm. #### Linux: @@ -60,14 +60,14 @@ To install KVM and the correct version of Mono on OS X using [Homebrew](http://b To install KVM on Linux run the following command: ``` -curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh +curl https://raw.githubusercontent.com/aspnet/Home/dev/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh ``` Note that on Linux you need to also install [Mono](http://mono-project.com) 3.4.1 or later. ### Install the K Runtime Environment (KRE) -Now that you have KVM setup you can install the latest version of the runtime by running the following command: ```kvm install 1.0.0-alpha3``` +Now that you have KVM setup you can install the latest version of the runtime by running the following command: ```kvm upgrade``` This command will download the specified version of the K Runtime Environment (KRE), and put it on your user profile ready to use. You are now ready to start using ASP.NET vNext! @@ -75,13 +75,11 @@ This command will download the specified version of the K Runtime Environment (K The samples in this repo are basic starting points for you to experiment with. -+ [ConsoleApp](https://github.com/aspnet/Home/tree/master/samples/ConsoleApp). This is just basic console app if you want to use it as a starting point. -+ [HelloWeb](https://github.com/aspnet/Home/tree/master/samples/HelloWeb). This is a minimal startup class that shows welcome page and static file middleware. This is mostly for you to run through the steps in the readme and make sure you have everything setup and working correctly. -+ [HelloMvc](https://github.com/aspnet/Home/tree/master/samples/HelloMvc). This sample is a basic MVC app. It is not designed to show all the functionality of the new web stack, but to give you a starting point to play with features. ++ [ConsoleApp](https://github.com/aspnet/Home/tree/dev/samples/ConsoleApp). This is just basic console app if you want to use it as a starting point. ++ [HelloWeb](https://github.com/aspnet/Home/tree/dev/samples/HelloWeb). This is a minimal startup class that shows welcome page and static file middleware. This is mostly for you to run through the steps in the readme and make sure you have everything setup and working correctly. ++ [HelloMvc](https://github.com/aspnet/Home/tree/dev/samples/HelloMvc). This sample is a basic MVC app. It is not designed to show all the functionality of the new web stack, but to give you a starting point to play with features. + [MVC Music Store](https://github.com/aspnet/MusicStore) and [BugTracker](https://github.com/aspnet/BugTracker) are application samples that are both being ported to ASP.NET vNext. Each of these samples have their own separate repositories that you can look at. -**NOTE: The samples are pinned to a specific version of the packages. If you want to try the latest builds then update the project.json and replace the last part of the version with a '\*', so '1.0.0-alpha3' becomes '1.0.0-alpha3-\*', and then run ```kpm restore``` to pull down the latest packages** - ### Running the samples 1. Clone the Home repository @@ -98,7 +96,7 @@ The samples in this repo are basic starting points for you to experiment with. By default when running ASP.NET vNext applications on the Windows platform you are running on the full .NET Framework. You can switch to use the new Cloud Optimized runtime, or Core CLR, using the KVM command. -1. Run ```kvm install 1.0.0-alpha3 -svrc50``` This command gets the latest Core CLR version of the k runtime and sets it as your default. The -svrc50 switch tells it to use Core CLR. You can use -svr50 to target desktop again. +1. Run ```kvm upgrade -runtime CoreCLR``` This command gets the latest Core CLR version of the k runtime and sets it as your default. The `-runtime CoreCLR` switch tells it to use Core CLR. You can use `-r CLR` to target desktop again. 2. Run ```k web``` to run on WebListener. 3. The first line of your output should say "Loaded Module: klr.core45.dll" instead of "Loaded Module: klr.net45.dll" 4. The HelloWeb app should work the same as when running on the full desktop .NET Framework but now as a fully self-contained app with true side-by-side versioning support. @@ -137,4 +135,4 @@ A description of all the repos is [here](https://github.com/aspnet/Home/wiki/Rep ## Feedback -Check out the [contributing](https://github.com/aspnet/Home/blob/master/CONTRIBUTING.md) page to see the best places to log issues and start discussions. +Check out the [contributing](https://github.com/aspnet/Home/blob/dev/CONTRIBUTING.md) page to see the best places to log issues and start discussions. diff --git a/kvm.ps1 b/kvm.ps1 index 55e543e95b98..2367bebffe71 100644 --- a/kvm.ps1 +++ b/kvm.ps1 @@ -6,16 +6,26 @@ param( [alias("g")][switch] $global = $false, [alias("p")][switch] $persistent = $false, [alias("f")][switch] $force = $false, + [alias("r")][string] $runtime, [switch] $x86 = $false, + [switch] $amd64 = $false, + #deprecated [switch] $x64 = $false, + #deprecated [switch] $svr50 = $false, + #deprecated [switch] $svrc50 = $false, + [alias("w")][switch] $wait = $false, [alias("a")] [string] $alias = $null, [parameter(Position=1, ValueFromRemainingArguments=$true)] [string[]]$args=@() ) +$selectedArch=$null; +$defaultArch="x86" +$selectedRuntime=$null +$defaultRuntime="CLR" $userKrePath = $env:USERPROFILE + "\.kre" $userKrePackages = $userKrePath + "\packages" $globalKrePath = $env:ProgramFiles + "\KRE" @@ -23,23 +33,23 @@ $globalKrePackages = $globalKrePath + "\packages" $feed = $env:KRE_NUGET_API_URL function String-IsEmptyOrWhitespace([string]$str) { - return [string]::IsNullOrEmpty($str) -or $str.Trim().length -eq 0 + return [string]::IsNullOrEmpty($str) -or $str.Trim().length -eq 0 } if (!$feed) { - $feed = "https://www.myget.org/F/aspnetmaster/api/v2"; + $feed = "https://www.myget.org/F/aspnetvnext/api/v2"; } $scriptPath = $myInvocation.MyCommand.Definition function Kvm-Help { @" -K Runtime Environment Version Manager - Build 10010 +K Runtime Environment Version Manager - Build 10017 USAGE: kvm [options] -kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy
] +kvm upgrade [-x86][-amd64] [-r|-runtime CLR|CoreCLR] [-g|-global] [-f|-force] [-proxy
] install latest KRE from feed set 'default' alias to installed version add KRE bin to user PATH environment variable @@ -47,7 +57,7 @@ kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy
] -f|-force upgrade even if latest is already installed -proxy
use given address as proxy when accessing remote server -kvm install |||latest [-x86][-x64] [-svr50][-svrc50] [-a|-alias ] [-g|-global] [-f|-force] +kvm install |||latest [-x86][-amd64] [-r|-runtime CLR|CoreCLR] [-a|-alias ] [-g|-global] [-f|-force] | install requested KRE from feed install requested KRE from package on local filesystem latest install latest KRE from feed @@ -57,7 +67,7 @@ kvm install |||latest [-x86][-x64] [-svr50][-svrc50] [-a|- -g|-global install to machine-wide location -f|-force install even if specified version is already installed -kvm use ||none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global] +kvm use ||none [-x86][-amd64] [-r|-runtime CLR|CoreCLR] [-p|-persistent] [-g|-global] | add KRE bin to path of current command line none remove KRE bin from path of current command line -p|-persistent add KRE bin to PATH environment variables persistently @@ -72,7 +82,7 @@ kvm alias kvm alias display value of the specified alias -kvm alias | [-x86][-x64] [-svr50][-svrc50] +kvm alias | [-x86][-amd64] [-r|-runtime CLR|CoreCLR] The name of the alias to set | The KRE version to set the alias to. Alternatively use the version of the specified alias @@ -83,103 +93,112 @@ kvm unalias } function Kvm-Global-Setup { - If (Needs-Elevation) - { - $arguments = "& '$scriptPath' setup $(Requested-Switches) -persistent" - Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait - Write-Host "Setup complete" - Kvm-Help - break - } - - $scriptFolder = [System.IO.Path]::GetDirectoryName($scriptPath) - - $kvmBinPath = "$userKrePath\bin" - - Write-Host "Copying file $kvmBinPath\kvm.ps1" - md $kvmBinPath -Force | Out-Null - copy "$scriptFolder\kvm.ps1" "$kvmBinPath\kvm.ps1" - - Write-Host "Copying file $kvmBinPath\kvm.cmd" - copy "$scriptFolder\kvm.cmd" "$kvmBinPath\kvm.cmd" + $kvmBinPath = "$userKrePath\bin" + If (Needs-Elevation) + { + $arguments = "-ExecutionPolicy unrestricted & '$scriptPath' setup -global -wait" + Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait Write-Host "Adding $kvmBinPath to process PATH" Set-Path (Change-Path $env:Path $kvmBinPath ($kvmBinPath)) - - Write-Host "Adding $kvmBinPath to user PATH" - $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) - $userPath = Change-Path $userPath $kvmBinPath ($kvmBinPath) - [Environment]::SetEnvironmentVariable("Path", $userPath, [System.EnvironmentVariableTarget]::User) - Write-Host "Adding $globalKrePath;%USERPROFILE%\.kre to process KRE_HOME" $envKreHome = $env:KRE_HOME $envKreHome = Change-Path $envKreHome "%USERPROFILE%\.kre" ("%USERPROFILE%\.kre") $envKreHome = Change-Path $envKreHome $globalKrePath ($globalKrePath) $env:KRE_HOME = $envKreHome + Write-Host "Setup complete" + break + } + + $scriptFolder = [System.IO.Path]::GetDirectoryName($scriptPath) + + Write-Host "Copying file $kvmBinPath\kvm.ps1" + md $kvmBinPath -Force | Out-Null + copy "$scriptFolder\kvm.ps1" "$kvmBinPath\kvm.ps1" + + Write-Host "Copying file $kvmBinPath\kvm.cmd" + copy "$scriptFolder\kvm.cmd" "$kvmBinPath\kvm.cmd" + + Write-Host "Adding $kvmBinPath to process PATH" + Set-Path (Change-Path $env:Path $kvmBinPath ($kvmBinPath)) - Write-Host "Adding $globalKrePath;%USERPROFILE%\.kre to machine KRE_HOME" - $machineKreHome = [Environment]::GetEnvironmentVariable("KRE_HOME", [System.EnvironmentVariableTarget]::Machine) - $machineKreHome = Change-Path $machineKreHome "%USERPROFILE%\.kre" ("%USERPROFILE%\.kre") - $machineKreHome = Change-Path $machineKreHome $globalKrePath ($globalKrePath) - [Environment]::SetEnvironmentVariable("KRE_HOME", $machineKreHome, [System.EnvironmentVariableTarget]::Machine) + Write-Host "Adding $kvmBinPath to user PATH" + $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) + $userPath = Change-Path $userPath $kvmBinPath ($kvmBinPath) + [Environment]::SetEnvironmentVariable("Path", $userPath, [System.EnvironmentVariableTarget]::User) - Write-Host "Press any key to continue ..." - $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown,AllowCtrlC") + Write-Host "Adding $globalKrePath;%USERPROFILE%\.kre to process KRE_HOME" + $envKreHome = $env:KRE_HOME + $envKreHome = Change-Path $envKreHome "%USERPROFILE%\.kre" ("%USERPROFILE%\.kre") + $envKreHome = Change-Path $envKreHome $globalKrePath ($globalKrePath) + $env:KRE_HOME = $envKreHome + + Write-Host "Adding $globalKrePath;%USERPROFILE%\.kre to machine KRE_HOME" + $machineKreHome = [Environment]::GetEnvironmentVariable("KRE_HOME", [System.EnvironmentVariableTarget]::Machine) + $machineKreHome = Change-Path $machineKreHome "%USERPROFILE%\.kre" ("%USERPROFILE%\.kre") + $machineKreHome = Change-Path $machineKreHome $globalKrePath ($globalKrePath) + [Environment]::SetEnvironmentVariable("KRE_HOME", $machineKreHome, [System.EnvironmentVariableTarget]::Machine) } function Kvm-Global-Upgrade { - $persistent = $true - $alias="default" - If (Needs-Elevation) { - $arguments = "& '$scriptPath' upgrade -global $(Requested-Switches)" - Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait - break - } - Kvm-Global-Install "latest" + $persistent = $true + $alias="default" + $versionOrAlias = Kvm-Find-Latest $selectedRuntime $selectedArch + If (Needs-Elevation) { + $arguments = "-ExecutionPolicy unrestricted & '$scriptPath' install '$versionOrAlias' -global $(Requested-Switches) -wait" + Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait + Kvm-Set-Global-Process-Path $versionOrAlias + break + } + Kvm-Install $versionOrAlias $true } function Kvm-Upgrade { - $persistent = $true - $alias="default" - Kvm-Install "latest" + $persistent = $true + $alias="default" + Kvm-Install "latest" $false } function Add-Proxy-If-Specified { param( - [System.Net.WebClient] $wc + [System.Net.WebClient] $wc ) - if (!$proxy) { - $proxy = $env:http_proxy - } - if ($proxy) { - $wp = New-Object System.Net.WebProxy($proxy) - $pb = New-Object UriBuilder($proxy) - if (!$pb.UserName) { - $wp.Credentials = [System.Net.CredentialCache]::DefaultCredentials - } else { - $wp.Credentials = New-Object System.Net.NetworkCredential($pb.UserName, $pb.Password) - } - $wc.Proxy = $wp + if (!$proxy) { + $proxy = $env:http_proxy + } + if ($proxy) { + $wp = New-Object System.Net.WebProxy($proxy) + $pb = New-Object UriBuilder($proxy) + if (!$pb.UserName) { + $wp.Credentials = [System.Net.CredentialCache]::DefaultCredentials + } else { + $wp.Credentials = New-Object System.Net.NetworkCredential($pb.UserName, $pb.Password) } + $wc.Proxy = $wp + } } function Kvm-Find-Latest { param( - [string] $platform, - [string] $architecture + [string] $platform, + [string] $architecture ) - Write-Host "Determining latest version" + Write-Host "Determining latest version" - $url = "$feed/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" + $url = "$feed/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" - $wc = New-Object System.Net.WebClient - $wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c") - Add-Proxy-If-Specified($wc) - [xml]$xml = $wc.DownloadString($url) + $wc = New-Object System.Net.WebClient + $wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c") + Add-Proxy-If-Specified($wc) + [xml]$xml = $wc.DownloadString($url) - $version = Select-Xml "//d:Version" -Namespace @{d='http://schemas.microsoft.com/ado/2007/08/dataservices'} $xml + $version = Select-Xml "//d:Version" -Namespace @{d='http://schemas.microsoft.com/ado/2007/08/dataservices'} $xml + + if (String-IsEmptyOrWhitespace($version)) { + throw "There are no packages for platform '$platform', architecture '$architecture' in the feed '$feed'" + } - return $version + return $version } function Do-Kvm-Download { @@ -187,45 +206,45 @@ param( [string] $kreFullName, [string] $packagesFolder ) - $parts = $kreFullName.Split(".", 2) + $parts = $kreFullName.Split(".", 2) - $url = "$feed/package/" + $parts[0] + "/" + $parts[1] - $kreFolder = Join-Path $packagesFolder $kreFullName - $kreFile = Join-Path $kreFolder "$kreFullName.nupkg" + $url = "$feed/package/" + $parts[0] + "/" + $parts[1] + $kreFolder = Join-Path $packagesFolder $kreFullName + $kreFile = Join-Path $kreFolder "$kreFullName.nupkg" - If (Test-Path $kreFolder) { - if($force) - { - rm $kreFolder -Recurse -Force - } else { - Write-Host "$kreFullName already installed." - return; - } + If (Test-Path $kreFolder) { + if($force) + { + rm $kreFolder -Recurse -Force + } else { + Write-Host "$kreFullName already installed." + return; } + } - Write-Host "Downloading" $kreFullName "from $feed" + Write-Host "Downloading" $kreFullName "from $feed" - #Downloading to temp location - $kreTempDownload = Join-Path $packagesFolder "temp" - $tempKreFile = Join-Path $kreTempDownload "$kreFullName.nupkg" + #Downloading to temp location + $kreTempDownload = Join-Path $packagesFolder "temp" + $tempKreFile = Join-Path $kreTempDownload "$kreFullName.nupkg" - if(Test-Path $kreTempDownload) { - del "$kreTempDownload\*" -recurse - } else { - md $kreTempDownload -Force | Out-Null - } + if(Test-Path $kreTempDownload) { + del "$kreTempDownload\*" -recurse + } else { + md $kreTempDownload -Force | Out-Null + } - $wc = New-Object System.Net.WebClient - $wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c") - Add-Proxy-If-Specified($wc) - $wc.DownloadFile($url, $tempKreFile) + $wc = New-Object System.Net.WebClient + $wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c") + Add-Proxy-If-Specified($wc) + $wc.DownloadFile($url, $tempKreFile) - Do-Kvm-Unpack $tempKreFile $kreTempDownload + Do-Kvm-Unpack $tempKreFile $kreTempDownload - md $kreFolder -Force | Out-Null - Write-Host "Installing to $kreFolder" - mv "$kreTempDownload\*" $kreFolder - Remove-Item "$kreTempDownload" -Force | Out-Null + md $kreFolder -Force | Out-Null + Write-Host "Installing to $kreFolder" + mv "$kreTempDownload\*" $kreFolder + Remove-Item "$kreTempDownload" -Force | Out-Null } function Do-Kvm-Unpack { @@ -233,111 +252,107 @@ param( [string] $kreFile, [string] $kreFolder ) - Write-Host "Unpacking to" $kreFolder - try { - #Shell will not recognize nupkg as a zip and throw, so rename it to zip - $kreZip = [System.IO.Path]::ChangeExtension($kreFile, "zip") - Rename-Item $kreFile $kreZip - #Use the shell to uncompress the nupkg - $shell_app=new-object -com shell.application - $zip_file = $shell_app.namespace($kreZip) - $destination = $shell_app.namespace($kreFolder) - $destination.Copyhere($zip_file.items(), 0x14) #0x4 = don't show UI, 0x10 = overwrite files - } - finally { - #make it a nupkg again - Rename-Item $kreZip $kreFile - } + Write-Host "Unpacking to" $kreFolder + try { + #Shell will not recognize nupkg as a zip and throw, so rename it to zip + $kreZip = [System.IO.Path]::ChangeExtension($kreFile, "zip") + Rename-Item $kreFile $kreZip + #Use the shell to uncompress the nupkg + $shell_app=new-object -com shell.application + $zip_file = $shell_app.namespace($kreZip) + $destination = $shell_app.namespace($kreFolder) + $destination.Copyhere($zip_file.items(), 0x14) #0x4 = don't show UI, 0x10 = overwrite files + } + finally { + #make it a nupkg again + Rename-Item $kreZip $kreFile + } - If (Test-Path ($kreFolder + "\[Content_Types].xml")) { - Remove-Item ($kreFolder + "\[Content_Types].xml") - } - If (Test-Path ($kreFolder + "\_rels\")) { - Remove-Item ($kreFolder + "\_rels\") -Force -Recurse - } - If (Test-Path ($kreFolder + "\package\")) { - Remove-Item ($kreFolder + "\package\") -Force -Recurse - } + If (Test-Path ($kreFolder + "\[Content_Types].xml")) { + Remove-Item ($kreFolder + "\[Content_Types].xml") + } + If (Test-Path ($kreFolder + "\_rels\")) { + Remove-Item ($kreFolder + "\_rels\") -Force -Recurse + } + If (Test-Path ($kreFolder + "\package\")) { + Remove-Item ($kreFolder + "\package\") -Force -Recurse + } } -function Kvm-Global-Install { +function Kvm-Install { param( - [string] $versionOrAlias + [string] $versionOrAlias, + [boolean] $isGlobal ) - If (Needs-Elevation) { - $arguments = "& '$scriptPath' install -global $versionOrAlias $(Requested-Switches)" - Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait - Kvm-Global-Use $versionOrAlias - break + if ($versionOrAlias -eq "latest") { + $versionOrAlias = Kvm-Find-Latest (Requested-Platform $defaultRuntime) (Requested-Architecture $defaultArch) + } + + if ($versionOrAlias.EndsWith(".nupkg")) { + $kreFullName = [System.IO.Path]::GetFileNameWithoutExtension($versionOrAlias) + } else { + $kreFullName = Requested-VersionOrAlias $versionOrAlias + } + + if ($isGlobal) { + if (Needs-Elevation) { + $arguments = "-ExecutionPolicy unrestricted & '$scriptPath' install '$versionOrAlias' -global $(Requested-Switches) -wait" + Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait + Kvm-Set-Global-Process-Path $versionOrAlias + break } + $packageFolder = $globalKrePackages + } else { + $packageFolder = $userKrePackages + } + + if ($versionOrAlias.EndsWith(".nupkg")) { + Set-Variable -Name "selectedArch" -Value (Package-Arch $kreFullName) -Scope Script + Set-Variable -Name "selectedRuntime" -Value (Package-Platform $kreFullName) -Scope Script + + $kreFolder = "$packageFolder\$kreFullName" + $folderExists = Test-Path $kreFolder - if ($versionOrAlias -eq "latest") { - $versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") + if ($folderExists -and $force) { + del $kreFolder -Recurse -Force + $folderExists = $false; } - $kreFullName = Requested-VersionOrAlias $versionOrAlias + if ($folderExists) { + Write-Host "Target folder '$kreFolder' already exists" + } else { + $tempUnpackFolder = Join-Path $packageFolder "temp" + $tempKreFile = Join-Path $tempUnpackFolder "$kreFullName.nupkg" - Do-Kvm-Download $kreFullName $globalKrePackages - Kvm-Use $versionOrAlias - if (!$(String-IsEmptyOrWhitespace($alias))) { - Kvm-Alias-Set $alias $versionOrAlias + if(Test-Path $tempUnpackFolder) { + del "$tempUnpackFolder\*" -recurse + } else { + md $tempUnpackFolder -Force | Out-Null + } + copy $versionOrAlias $tempKreFile + + Do-Kvm-Unpack $tempKreFile $tempUnpackFolder + md $kreFolder -Force | Out-Null + Write-Host "Installing to $kreFolder" + mv "$tempUnpackFolder\*" $kreFolder + Remove-Item "$tempUnpackFolder" -Force | Out-Null } -} -function Kvm-Install { -param( - [string] $versionOrAlias -) - if ($versionOrAlias.EndsWith(".nupkg")) - { - $kreFullName = [System.IO.Path]::GetFileNameWithoutExtension($versionOrAlias) - $kreFolder = "$userKrePackages\$kreFullName" - $folderExists = Test-Path $kreFolder - - if($folderExists -and $force) { - del $kreFolder -Recurse -Force - $folderExists = $false; - } - - if($folderExists) { - Write-Host "Target folder '$kreFolder' already exists" - } else { - $tempUnpackFolder = Join-Path $userKrePackages "temp" - $tempKreFile = Join-Path $tempUnpackFolder "$kreFullName.nupkg" - - if(Test-Path $tempUnpackFolder) { - del "$tempUnpackFolder\*" -recurse - } else { - md $tempUnpackFolder -Force | Out-Null - } - copy $versionOrAlias $tempKreFile - - Do-Kvm-Unpack $tempKreFile $tempUnpackFolder - md $kreFolder -Force | Out-Null - Write-Host "Installing to $kreFolder" - mv "$tempUnpackFolder\*" $kreFolder - Remove-Item "$tempUnpackFolder" -Force | Out-Null - } - - $packageVersion = Package-Version $kreFullName - Kvm-Use $packageVersion - if (!$(String-IsEmptyOrWhitespace($alias))) { - Kvm-Alias-Set $alias $packageVersion - } + $packageVersion = Package-Version $kreFullName + + Kvm-Use $packageVersion + if (!$(String-IsEmptyOrWhitespace($alias))) { + Kvm-Alias-Set $alias $packageVersion } - else - { - if ($versionOrAlias -eq "latest") { - $versionOrAlias = Kvm-Find-Latest (Requested-Platform "svr50") (Requested-Architecture "x86") - } - $kreFullName = Requested-VersionOrAlias $versionOrAlias - - Do-Kvm-Download $kreFullName $userKrePackages - Kvm-Use $versionOrAlias - if (!$(String-IsEmptyOrWhitespace($alias))) { - Kvm-Alias-Set $alias $versionOrAlias - } + } + else + { + Do-Kvm-Download $kreFullName $packageFolder + Kvm-Use $versionOrAlias + if (!$(String-IsEmptyOrWhitespace($alias))) { + Kvm-Alias-Set "$alias" $versionOrAlias } + } } function Kvm-List { @@ -373,7 +388,7 @@ filter List-Parts { $active = $true } } - + $fullAlias="" $delim="" @@ -400,100 +415,114 @@ function Kvm-Global-Use { param( [string] $versionOrAlias ) - If (Needs-Elevation) { - $arguments = "& '$scriptPath' use -global $versionOrAlias $(Requested-Switches)" - if ($persistent) { - $arguments = $arguments + " -persistent" - } - Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait - break - } + If (Needs-Elevation) { + $arguments = "-ExecutionPolicy unrestricted & '$scriptPath' use '$versionOrAlias' -global $(Requested-Switches) -wait" + Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList $arguments -Wait + Kvm-Set-Global-Process-Path $versionOrAlias + break + } - if ($versionOrAlias -eq "none") { - Write-Host "Removing KRE from process PATH" - Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) + Kvm-Set-Global-Process-Path "$versionOrAlias" - if ($persistent) { - Write-Host "Removing KRE from machine PATH" - $machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) - $machinePath = Change-Path $machinePath "" ($globalKrePackages, $userKrePackages) - [Environment]::SetEnvironmentVariable("Path", $machinePath, [System.EnvironmentVariableTarget]::Machine) - } - return; + if ($versionOrAlias -eq "none") { + if ($persistent) { + Write-Host "Removing KRE from machine PATH" + $machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) + $machinePath = Change-Path $machinePath "" ($globalKrePackages, $userKrePackages) + [Environment]::SetEnvironmentVariable("Path", $machinePath, [System.EnvironmentVariableTarget]::Machine) } + return; + } - $kreFullName = Requested-VersionOrAlias $versionOrAlias + $kreFullName = Requested-VersionOrAlias "$versionOrAlias" + $kreBin = Locate-KreBinFromFullName $kreFullName + if ($kreBin -eq $null) { + Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" + return + } - $kreBin = Locate-KreBinFromFullName $kreFullName - if ($kreBin -eq $null) { - Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" - return - } + if ($persistent) { + Write-Host "Adding $kreBin to machine PATH" + $machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) + $machinePath = Change-Path $machinePath $kreBin ($globalKrePackages, $userKrePackages) + [Environment]::SetEnvironmentVariable("Path", $machinePath, [System.EnvironmentVariableTarget]::Machine) + } +} - Write-Host "Adding" $kreBin "to process PATH" - Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) +function Kvm-Set-Global-Process-Path { +param( + [string] $versionOrAlias +) + if ($versionOrAlias -eq "none") { + Write-Host "Removing KRE from process PATH" + Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) + return + } - if ($persistent) { - Write-Host "Adding $kreBin to machine PATH" - $machinePath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) - $machinePath = Change-Path $machinePath $kreBin ($globalKrePackages, $userKrePackages) - [Environment]::SetEnvironmentVariable("Path", $machinePath, [System.EnvironmentVariableTarget]::Machine) - } + $kreFullName = Requested-VersionOrAlias $versionOrAlias + $kreBin = Locate-KreBinFromFullName $kreFullName + if ($kreBin -eq $null) { + Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" + return + } + + Write-Host "Adding" $kreBin "to process PATH" + Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) } function Kvm-Use { param( [string] $versionOrAlias ) - if ($versionOrAlias -eq "none") { - Write-Host "Removing KRE from process PATH" - Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) - - if ($persistent) { - Write-Host "Removing KRE from user PATH" - $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) - $userPath = Change-Path $userPath "" ($globalKrePackages, $userKrePackages) - [Environment]::SetEnvironmentVariable("Path", $userPath, [System.EnvironmentVariableTarget]::User) - } - return; + if ($versionOrAlias -eq "none") { + Write-Host "Removing KRE from process PATH" + Set-Path (Change-Path $env:Path "" ($globalKrePackages, $userKrePackages)) + + if ($persistent) { + Write-Host "Removing KRE from user PATH" + $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) + $userPath = Change-Path $userPath "" ($globalKrePackages, $userKrePackages) + [Environment]::SetEnvironmentVariable("Path", $userPath, [System.EnvironmentVariableTarget]::User) } + return; + } - $kreFullName = Requested-VersionOrAlias $versionOrAlias + $kreFullName = Requested-VersionOrAlias $versionOrAlias - $kreBin = Locate-KreBinFromFullName $kreFullName - if ($kreBin -eq $null) { - Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" - return - } + $kreBin = Locate-KreBinFromFullName $kreFullName + if ($kreBin -eq $null) { + Write-Host "Cannot find $kreFullName, do you need to run 'kvm install $versionOrAlias'?" + return + } - Write-Host "Adding" $kreBin "to process PATH" - Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) + Write-Host "Adding" $kreBin "to process PATH" + Set-Path (Change-Path $env:Path $kreBin ($globalKrePackages, $userKrePackages)) - if ($persistent) { - Write-Host "Adding $kreBin to user PATH" - $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) - $userPath = Change-Path $userPath $kreBin ($globalKrePackages, $userKrePackages) - [Environment]::SetEnvironmentVariable("Path", $userPath, [System.EnvironmentVariableTarget]::User) - } + if ($persistent) { + Write-Host "Adding $kreBin to user PATH" + $userPath = [Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) + $userPath = Change-Path $userPath $kreBin ($globalKrePackages, $userKrePackages) + [Environment]::SetEnvironmentVariable("Path", $userPath, [System.EnvironmentVariableTarget]::User) + } } function Kvm-Alias-List { - md ($userKrePath + "\alias\") -Force | Out-Null + md ($userKrePath + "\alias\") -Force | Out-Null - Get-ChildItem ($userKrePath + "\alias\") | Select @{label='Alias';expression={$_.BaseName}}, @{label='Name';expression={Get-Content $_.FullName }} | Format-Table -AutoSize + Get-ChildItem ($userKrePath + "\alias\") | Select @{label='Alias';expression={$_.BaseName}}, @{label='Name';expression={Get-Content $_.FullName }} | Format-Table -AutoSize } function Kvm-Alias-Get { param( [string] $name ) - md ($userKrePath + "\alias\") -Force | Out-Null - $aliasFilePath=$userKrePath + "\alias\" + $name + ".txt" - if (!(Test-Path $aliasFilePath)) { - Write-Host "Alias '$name' does not exist" - } else { - Write-Host "Alias '$name' is set to" (Get-Content ($userKrePath + "\alias\" + $name + ".txt")) - } + md ($userKrePath + "\alias\") -Force | Out-Null + $aliasFilePath=$userKrePath + "\alias\" + $name + ".txt" + if (!(Test-Path $aliasFilePath)) { + Write-Host "Alias '$name' does not exist" + } else { + Write-Host "Alias '$name' is set to" (Get-Content ($userKrePath + "\alias\" + $name + ".txt")) + } } function Kvm-Alias-Set { @@ -501,25 +530,25 @@ param( [string] $name, [string] $value ) - $kreFullName = Requested-VersionOrAlias $value - $aliasFilePath = $userKrePath + "\alias\" + $name + ".txt" - $action = if (Test-Path $aliasFilePath) { "Updating" } else { "Setting" } - Write-Host "$action alias '$name' to '$kreFullName'" - md ($userKrePath + "\alias\") -Force | Out-Null - $kreFullName | Out-File ($aliasFilePath) ascii + $kreFullName = Requested-VersionOrAlias $value + $aliasFilePath = $userKrePath + "\alias\" + $name + ".txt" + $action = if (Test-Path $aliasFilePath) { "Updating" } else { "Setting" } + Write-Host "$action alias '$name' to '$kreFullName'" + md ($userKrePath + "\alias\") -Force | Out-Null + $kreFullName | Out-File ($aliasFilePath) ascii } function Kvm-Unalias { param( [string] $name ) - $aliasPath=$userKrePath + "\alias\" + $name + ".txt" - if (Test-Path -literalPath "$aliasPath") { - Write-Host "Removing alias $name" - Remove-Item -literalPath $aliasPath - } else { - Write-Host "Cannot remove alias, '$name' is not a valid alias name" - } + $aliasPath=$userKrePath + "\alias\" + $name + ".txt" + if (Test-Path -literalPath "$aliasPath") { + Write-Host "Removing alias $name" + Remove-Item -literalPath $aliasPath + } else { + Write-Host "Cannot remove alias, '$name' is not a valid alias name" + } } function Locate-KreBinFromFullName() { @@ -544,58 +573,57 @@ function Package-Version() { param( [string] $kreFullName ) - return $kreFullName -replace '[^.]*.(.*)', '$1' + return $kreFullName -replace '[^.]*.(.*)', '$1' +} + +function Package-Platform() { +param( + [string] $kreFullName +) + return $kreFullName -replace 'KRE-([^-]*).*', '$1' } +function Package-Arch() { +param( + [string] $kreFullName +) + return $kreFullName -replace 'KRE-[^-]*-([^.]*).*', '$1' +} + + function Requested-VersionOrAlias() { param( [string] $versionOrAlias ) - If (Test-Path ($userKrePath + "\alias\" + $versionOrAlias + ".txt")) { - $aliasValue = Get-Content ($userKrePath + "\alias\" + $versionOrAlias + ".txt") - $parts = $aliasValue.Split('.', 2) - $pkgVersion = $parts[1] - $parts =$parts[0].Split('-', 3) - $pkgPlatform = Requested-Platform $parts[1] - $pkgArchitecture = Requested-Architecture $parts[2] - } else { - $pkgVersion = $versionOrAlias - $pkgPlatform = Requested-Platform "svr50" - $pkgArchitecture = Requested-Architecture "x86" - } - return "KRE-" + $pkgPlatform + "-" + $pkgArchitecture + "." + $pkgVersion + If (Test-Path ($userKrePath + "\alias\" + $versionOrAlias + ".txt")) { + $aliasValue = Get-Content ($userKrePath + "\alias\" + $versionOrAlias + ".txt") + $parts = $aliasValue.Split('.', 2) + $pkgVersion = $parts[1] + $parts =$parts[0].Split('-', 3) + $pkgPlatform = Requested-Platform $parts[1] + $pkgArchitecture = Requested-Architecture $parts[2] + } else { + $pkgVersion = $versionOrAlias + $pkgPlatform = Requested-Platform $defaultRuntime + $pkgArchitecture = Requested-Architecture $defaultArch + } + return "KRE-" + $pkgPlatform + "-" + $pkgArchitecture + "." + $pkgVersion } function Requested-Platform() { param( [string] $default ) - if ($svr50 -and $svrc50) { - Throw "This command cannot accept both -svr50 and -svrc50" - } - if ($svr50) { - return "svr50" - } - if ($svrc50) { - return "svrc50" - } - return $default + if (!(String-IsEmptyOrWhitespace($selectedRuntime))) {return $selectedRuntime} + return $default } function Requested-Architecture() { param( [string] $default ) - if ($x86 -and $x64) { - Throw "This command cannot accept both -x86 and -x64" - } - if ($x86) { - return "x86" - } - if ($x64) { - return "x64" - } - return $default + if (!(String-IsEmptyOrWhitespace($selectedArch))) {return $selectedArch} + return $default } function Change-Path() { @@ -604,19 +632,19 @@ param( [string] $prependPath, [string[]] $removePaths ) - $newPath = $prependPath - foreach($portion in $existingPaths.Split(';')) { - $skip = $portion -eq "" - foreach($removePath in $removePaths) { - if ($portion.StartsWith($removePath)) { - $skip = $true - } - } - if (!$skip) { - $newPath = $newPath + ";" + $portion + $newPath = $prependPath + foreach($portion in $existingPaths.Split(';')) { + $skip = $portion -eq "" + foreach($removePath in $removePaths) { + if ($portion.StartsWith($removePath)) { + $skip = $true } } - return $newPath + if (!$skip) { + $newPath = $newPath + ";" + $portion + } + } + return $newPath } function Set-Path() { @@ -631,35 +659,70 @@ SET "PATH=$newPath" } function Needs-Elevation() { - $user = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent() - $elevated = $user.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") - return -NOT $elevated + $user = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent() + $elevated = $user.IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") + return -NOT $elevated } function Requested-Switches() { $arguments = "" if ($x86) {$arguments = "$arguments -x86"} + if ($amd64) {$arguments = "$arguments -amd64"} + #deprecated if ($x64) {$arguments = "$arguments -x64"} - if ($svr50) {$arguments = "$arguments -svr50"} - if ($svrc50) {$arguments = "$arguments -svrc50"} + if ($selectedRuntime) {$arguments = "$arguments -runtime $selectedRuntime"} + if ($persistent) {$arguments = "$arguments -persistent"} + if ($force) {$arguments = "$arguments -force"} + if (!$(String-IsEmptyOrWhitespace($alias))) {$arguments = "$arguments -alias '$alias'"} return $arguments } - try { - if ($global) { +function Validate-And-Santitise-Switches() +{ + if ($svr50 -and $runtime) {throw "You cannot select both the -runtime switch and the -svr50 runtimes"} + if ($svrc50 -and $runtime) {throw "You cannot select both the -runtime switch and the -svrc50 runtimes"} + if ($x86 -and $amd64) {throw "You cannot select both x86 and amd64 architectures"} + if ($x86 -and $x64) {throw "You cannot select both x86 and x64 architectures"} + if ($x64 -and $amd64) {throw "You cannot select both x64 and amd64 architectures"} + + if ($runtime) { + $validRuntimes = "CoreCLR", "CLR", "svr50", "svrc50" + $match = $validRuntimes | ? { $_ -like $runtime } | Select -First 1 + if (!$match) {throw "'$runtime' is not a valid runtime"} + Set-Variable -Name "selectedRuntime" -Value $match -Scope Script + } elseif ($svr50) { + Write-Host "Warning: -svr50 is deprecated, use -runtime CLR for new packages." + Set-Variable -Name "selectedRuntime" -Value "svr50" -Scope Script + } elseif ($svrc50) { + Write-Host "Warning: -svrc50 is deprecated, use -runtime CoreCLR for new packages." + Set-Variable -Name "selectedRuntime" -Value "svrc50" -Scope Script + } + + if ($x64) { + Write-Host "Warning: -x64 is deprecated, use -amd64 for new packages." + Set-Variable -Name "selectedArch" -Value "x64" -Scope Script + } elseif ($amd64) { + Set-Variable -Name "selectedArch" -Value "amd64" -Scope Script + } elseif ($x86) { + Set-Variable -Name "selectedArch" -Value "x86" -Scope Script + } +} + +try { + Validate-And-Santitise-Switches + if ($global) { switch -wildcard ($command + " " + $args.Count) { "setup 0" {Kvm-Global-Setup} "upgrade 0" {Kvm-Global-Upgrade} - "install 1" {Kvm-Global-Install $args[0]} -# "list 0" {Kvm-Global-List} + "install 1" {Kvm-Install $args[0] $true} "use 1" {Kvm-Global-Use $args[0]} - default {Write-Host 'Unknown command, or global switch not supported'; Kvm-Help;} + default {throw "Unknown command, or global switch not supported"}; } - } else { + } else { switch -wildcard ($command + " " + $args.Count) { "setup 0" {Kvm-Global-Setup} "upgrade 0" {Kvm-Upgrade} - "install 1" {Kvm-Install $args[0]} + "install 1" {Kvm-Install $args[0] $false} "list 0" {Kvm-List} "use 1" {Kvm-Use $args[0]} "alias 0" {Kvm-Alias-List} @@ -668,10 +731,15 @@ function Requested-Switches() { "unalias 1" {Kvm-Unalias $args[0]} "help 0" {Kvm-Help} " 0" {Kvm-Help} - default {Write-Host 'Unknown command'; Kvm-Help;} + default {throw "Unknown command"}; } - } - } - catch { - Write-Host $_ -ForegroundColor Red ; } +} +catch { + Write-Host $_ -ForegroundColor Red ; + Write-Host "Type 'kvm help' for help on how to use kvm." +} +if ($wait) { + Write-Host "Press any key to continue ..." + $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown,AllowCtrlC") +} diff --git a/kvm.sh b/kvm.sh index ce862d203c9a..c3a222cee10b 100644 --- a/kvm.sh +++ b/kvm.sh @@ -14,23 +14,19 @@ if [ -z "$KRE_USER_HOME" ]; then fi KRE_USER_PACKAGES="$KRE_USER_HOME/packages" -KRE_MONO45= -KRE_X86= -KRE_X64= if [ -z "$KRE_FEED" ]; then - KRE_FEED="https://www.myget.org/F/aspnetmaster/api/v2" + KRE_FEED="https://www.myget.org/F/aspnetvnext/api/v2" fi _kvm_find_latest() { - local platform="mono45" - local architecture="x86" + local platform="Mono" if ! _kvm_has "curl"; then echo 'KVM Needs curl to proceed.' >&2; return 1 fi - local url="$KRE_FEED/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" + local url="$KRE_FEED/GetUpdates()?packageIds=%27KRE-$platform%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false" xml="$(curl $url 2>/dev/null)" echo $xml | grep \<[a-zA-Z]:Version\>* >> /dev/null || return 1 version="$(echo $xml | sed 's/.*<[a-zA-Z]:Version>\([^<]*\).*/\1/')" @@ -61,7 +57,7 @@ _kvm_package_name() { _kvm_package_runtime() { local kreFullName="$1" - echo "$kreFullName" | sed "s/KRE-\([^-]*\).*/\1/" + echo "$kreFullName" | sed "s/KRE-\([^.-]*\).*/\1/" } _kvm_download() { @@ -93,6 +89,7 @@ _kvm_download() { [[ $httpResult != "302" && $httpResult != "200" ]] && echo "HTTP Error $httpResult fetching $kreFullName from $KRE_FEED" && return 1 _kvm_unpack $kreFile $kreFolder + return $? } _kvm_unpack() { @@ -119,23 +116,6 @@ _kvm_unpack() { -exec sh -c "head -c 11 {} | grep '/bin/bash' > /dev/null" \; -print | xargs chmod 775 } -# This is not currently required. Placeholder for the case when we have multiple platforms (ie if we bundle mono) -_kvm_requested_platform() { - local default=$1 - [[ -z $KRE_MONO45 ]] && echo "mono45" && return - echo $default -} - -# This is not currently required. Placeholder for the case where we have multiple architectures (ie if we bundle mono) -_kvm_requested_architecture() { - local default=$1 - - [[ -n $KRE_X86 && -n $KRE_X64 ]] && echo "This command cannot accept both -x86 and -x64" && return 1 - [[ -z $KRE_X86 ]] && echo "x86" && return - [[ -z $KRE_X64 ]] && echo "x64" && return - echo $default -} - _kvm_requested_version_or_alias() { local versionOrAlias="$1" @@ -143,14 +123,13 @@ _kvm_requested_version_or_alias() { local kreFullName=$(cat "$KRE_USER_HOME/alias/$versionOrAlias.alias") local pkgName=$(echo $kreFullName | sed "s/\([^.]*\).*/\1/") local pkgVersion=$(echo $kreFullName | sed "s/[^.]*.\(.*\)/\1/") - local pkgPlatform=$(_kvm_requested_platform $(echo "$pkgName" | sed "s/KRE-\([^-]*\).*/\1/")) - local pkgArchitecture=$(_kvm_requested_architecture $(echo "$pkgName" | sed "s/.*-.*-\([^-]*\).*/\1/")) + local pkgPlatform=$(echo "$pkgName" | sed "s/KRE-\([^.-]*\).*/\1/") else local pkgVersion=$versionOrAlias - local pkgPlatform=$(_kvm_requested_platform "mono45") - local pkgArchitecture=$(_kvm_requested_architecture "x86") + local pkgPlatform="Mono" fi - echo "KRE-$pkgPlatform-$pkgArchitecture.$pkgVersion" + + echo "KRE-$pkgPlatform.$pkgVersion" } # This will be more relevant if we support global installs @@ -169,7 +148,7 @@ kvm() case $1 in "help" ) echo "" - echo "K Runtime Environment Version Manager - Build 10010" + echo "K Runtime Environment Version Manager - Build 10017" echo "" echo "USAGE: kvm [options]" echo "" @@ -235,7 +214,7 @@ kvm() done if [[ "$versionOrAlias" == "latest" ]]; then echo "Determining latest version" - versionOrAlias=$(_kvm_find_latest mono45 x86) + versionOrAlias=$(_kvm_find_latest) [[ $? == 1 ]] && echo "Error: Could not find latest version from feed $KRE_FEED" && return 1 echo "Latest version is $versionOrAlias" fi @@ -251,6 +230,7 @@ kvm() mkdir "$kreFolder" > /dev/null 2>&1 cp -a "$versionOrAlias" "$kreFile" _kvm_unpack "$kreFile" "$kreFolder" + [[ $? == 1 ]] && return 1 fi kvm use "$kreVersion" "$persistent" [[ -n $alias ]] && kvm alias "$alias" "$kreVersion" @@ -258,7 +238,7 @@ kvm() local kreFullName="$(_kvm_requested_version_or_alias $versionOrAlias)" local kreFolder="$KRE_USER_PACKAGES/$kreFullName" _kvm_download "$kreFullName" "$kreFolder" - [[ $? == 1 ]] && return + [[ $? == 1 ]] && return 1 kvm use "$versionOrAlias" "$persistent" [[ -n $alias ]] && kvm alias "$alias" "$versionOrAlias" fi @@ -379,9 +359,9 @@ kvm() let i+=1 done - local formatString="%-6s %-20s %-7s %-12s %-20s %s\n" - printf "$formatString" "Active" "Version" "Runtime" "Architecture" "Location" "Alias" - printf "$formatString" "------" "-------" "-------" "------------" "--------" "-----" + local formatString="%-6s %-20s %-7s %-20s %s\n" + printf "$formatString" "Active" "Version" "Runtime" "Location" "Alias" + printf "$formatString" "------" "-------" "-------" "--------" "-----" local formattedHome=`(echo $KRE_USER_PACKAGES | sed s=$HOME=~=g)` for f in $(find $KRE_USER_PACKAGES/* -name "$searchGlob" -type d -prune -exec basename {} \;); do @@ -393,14 +373,15 @@ kvm() local alias="" local delim="" for i in "${arr[@]}"; do - temp="KRE-$pkgName-x86.$pkgVersion" - if [[ ${i#*/} == $temp ]]; then + temp="KRE-$pkgName.$pkgVersion" + temp2="KRE-$pkgName-x86.$pkgVersion" + if [[ ${i#*/} == $temp || ${i#*/} == $temp2 ]]; then alias+="$delim${i%/*}" delim=", " fi done - printf "$formatString" "$active" "$pkgVersion" "$pkgName" "x86" "$formattedHome" "$alias" + printf "$formatString" "$active" "$pkgVersion" "$pkgName" "$formattedHome" "$alias" [[ $# == 2 ]] && echo "" && return 0 done diff --git a/kvminstall.ps1 b/kvminstall.ps1 index 22c242262734..d2693188760a 100644 --- a/kvminstall.ps1 +++ b/kvminstall.ps1 @@ -8,8 +8,8 @@ if (!(Test-Path $tempPath)) { md $tempPath | Out-Null } $webClient = New-Object System.Net.WebClient Write-Host "Downloading KVM.ps1 to $kvmPs1Path" -$webClient.DownloadFile('https://raw.githubusercontent.com/aspnet/Home/master/kvm.ps1', $kvmPs1Path) +$webClient.DownloadFile('https://raw.githubusercontent.com/aspnet/Home/dev/kvm.ps1', $kvmPs1Path) Write-Host "Downloading KVM.cmd to $kvmCmdPath" -$webClient.DownloadFile('https://raw.githubusercontent.com/aspnet/Home/master/kvm.cmd', $kvmCmdPath) +$webClient.DownloadFile('https://raw.githubusercontent.com/aspnet/Home/dev/kvm.cmd', $kvmCmdPath) Write-Host "Installing KVM" & $kvmCmdPath setup \ No newline at end of file diff --git a/kvminstall.sh b/kvminstall.sh index ab98cf800130..65e93363b640 100644 --- a/kvminstall.sh +++ b/kvminstall.sh @@ -27,7 +27,7 @@ if ! _kvmsetup_has "curl"; then fi if [ -z "$KVM_SOURCE" ]; then - KVM_SOURCE="https://raw.githubusercontent.com/aspnet/Home/master/kvm.sh" + KVM_SOURCE="https://raw.githubusercontent.com/aspnet/Home/dev/kvm.sh" fi # Downloading to $KVM_DIR diff --git a/samples/HelloMvc/Startup.cs b/samples/HelloMvc/Startup.cs index cbe4bc4f59ca..eb17e8a18c8e 100644 --- a/samples/HelloMvc/Startup.cs +++ b/samples/HelloMvc/Startup.cs @@ -6,7 +6,7 @@ namespace HelloMvc { public class Startup { - public void Configure(IBuilder app) + public void Configure(IApplicationBuilder app) { app.UseErrorPage(); diff --git a/samples/HelloMvc/project.json b/samples/HelloMvc/project.json index f835cca6670f..36082d31f816 100644 --- a/samples/HelloMvc/project.json +++ b/samples/HelloMvc/project.json @@ -1,17 +1,17 @@ { "dependencies": { - "Kestrel": "1.0.0-alpha3", - "Microsoft.AspNet.Diagnostics": "1.0.0-alpha3", - "Microsoft.AspNet.Hosting": "1.0.0-alpha3", - "Microsoft.AspNet.Mvc": "6.0.0-alpha3", - "Microsoft.AspNet.Server.WebListener": "1.0.0-alpha3" + "Kestrel": "1.0.0-*", + "Microsoft.AspNet.Diagnostics": "1.0.0-*", + "Microsoft.AspNet.Hosting": "1.0.0-*", + "Microsoft.AspNet.Mvc": "6.0.0-*", + "Microsoft.AspNet.Server.WebListener": "1.0.0-*" }, "commands": { "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001", "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004" }, - "frameworks": { - "net45": {}, - "k10": {} + "frameworks": { + "aspnet50": { }, + "aspnetcore50": { } } } \ No newline at end of file diff --git a/samples/HelloWeb/Startup.cs b/samples/HelloWeb/Startup.cs index 96e399e2efa5..b41f459f03d7 100644 --- a/samples/HelloWeb/Startup.cs +++ b/samples/HelloWeb/Startup.cs @@ -4,7 +4,7 @@ namespace KWebStartup { public class Startup { - public void Configure(IBuilder app) + public void Configure(IApplicationBuilder app) { app.UseStaticFiles(); app.UseWelcomePage(); diff --git a/samples/HelloWeb/project.json b/samples/HelloWeb/project.json index fc437856b62d..583d9546b57a 100644 --- a/samples/HelloWeb/project.json +++ b/samples/HelloWeb/project.json @@ -1,17 +1,17 @@ { "dependencies": { - "Kestrel": "1.0.0-alpha3", - "Microsoft.AspNet.Diagnostics": "1.0.0-alpha3", - "Microsoft.AspNet.Hosting": "1.0.0-alpha3", - "Microsoft.AspNet.Server.WebListener": "1.0.0-alpha3", - "Microsoft.AspNet.StaticFiles": "1.0.0-alpha3" + "Kestrel": "1.0.0-*", + "Microsoft.AspNet.Diagnostics": "1.0.0-*", + "Microsoft.AspNet.Hosting": "1.0.0-*", + "Microsoft.AspNet.Server.WebListener": "1.0.0-*", + "Microsoft.AspNet.StaticFiles": "1.0.0-*" }, "commands": { "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001", "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004" }, "frameworks": { - "net45": {}, - "k10": {} + "aspnet50": { }, + "aspnetcore50": { } } } \ No newline at end of file