diff --git a/Build/Newtonsoft.Json.nuspec b/Build/Newtonsoft.Json.nuspec
index 27eedf05..0b1eadb9 100644
--- a/Build/Newtonsoft.Json.nuspec
+++ b/Build/Newtonsoft.Json.nuspec
@@ -1,15 +1,47 @@
-
- Newtonsoft.Json
-
- Json.NET
- Json.NET is a popular high-performance JSON framework for .NET
- James Newton-King
- en-US
- http://www.newtonsoft.com/json
- http://www.newtonsoft.com/content/images/nugeticon.png
- https://raw.github.com/JamesNK/Newtonsoft.Json/master/LICENSE.md
- json
-
+
+ Newtonsoft.Json
+
+ Json.NET
+ Json.NET is a popular high-performance JSON framework for .NET
+ James Newton-King
+ en-US
+ http://www.newtonsoft.com/json
+ http://www.newtonsoft.com/content/images/nugeticon.png
+ https://raw.github.com/JamesNK/Newtonsoft.Json/master/LICENSE.md
+ json
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Build/build.ps1 b/Build/build.ps1
index 7e6e6e86..a96bc7a1 100644
--- a/Build/build.ps1
+++ b/Build/build.ps1
@@ -1,8 +1,8 @@
properties {
- $zipFileName = "Json80r3.zip"
+ $zipFileName = "Json80r4.zip"
$majorVersion = "8.0"
- $majorWithReleaseVersion = "8.0.3"
- $nugetPrelease = $null
+ $majorWithReleaseVersion = "8.0.4"
+ $nugetPrelease = "beta4"
$version = GetVersion $majorWithReleaseVersion
$packageId = "Newtonsoft.Json"
$signAssemblies = $false
@@ -11,7 +11,7 @@
$buildNuGet = $true
$treatWarningsAsErrors = $false
$workingName = if ($workingName) {$workingName} else {"Working"}
- $dnvmVersion = "1.0.0-rc1-update1"
+ $netCliVersion = "1.0.0-preview1-002702"
$baseDir = resolve-path ..
$buildDir = "$baseDir\Build"
@@ -22,9 +22,9 @@
$workingDir = "$baseDir\$workingName"
$workingSourceDir = "$workingDir\Src"
$builds = @(
- @{Name = "Newtonsoft.Json.Dotnet"; TestsName = "Newtonsoft.Json.Tests.Dotnet"; BuildFunction = "DnxBuild"; TestsFunction = "DnxTests"; Constants="dotnet"; FinalDir=$null; NuGetDir = $null; Framework=$null},
+ @{Name = "Newtonsoft.Json.Dotnet"; TestsName = "Newtonsoft.Json.Tests.Dotnet"; BuildFunction = "NetCliBuild"; TestsFunction = "NetCliTests"; Constants="dotnet"; FinalDir="netstandard1.0"; NuGetDir = "netstandard1.0"; Framework=$null},
@{Name = "Newtonsoft.Json"; TestsName = "Newtonsoft.Json.Tests"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; Constants=""; FinalDir="Net45"; NuGetDir = "net45"; Framework="net-4.0"},
- @{Name = "Newtonsoft.Json.Portable"; TestsName = "Newtonsoft.Json.Tests.Portable"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; Constants="PORTABLE"; FinalDir="Portable"; NuGetDir = "portable-net45+wp80+win8+wpa81+dnxcore50"; Framework="net-4.0"},
+ @{Name = "Newtonsoft.Json.Portable"; TestsName = "Newtonsoft.Json.Tests.Portable"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; Constants="PORTABLE"; FinalDir="Portable"; NuGetDir = "portable-net45+wp80+win8+wpa81"; Framework="net-4.0"},
@{Name = "Newtonsoft.Json.Portable40"; TestsName = "Newtonsoft.Json.Tests.Portable40"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; Constants="PORTABLE40"; FinalDir="Portable40"; NuGetDir = "portable-net40+sl5+wp80+win8+wpa81"; Framework="net-4.0"},
@{Name = "Newtonsoft.Json.Net40"; TestsName = "Newtonsoft.Json.Tests.Net40"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; Constants="NET40"; FinalDir="Net40"; NuGetDir = "net40"; Framework="net-4.0"},
@{Name = "Newtonsoft.Json.Net35"; TestsName = "Newtonsoft.Json.Tests.Net35"; BuildFunction = "MSBuildBuild"; TestsFunction = "NUnitTests"; Constants="NET35"; FinalDir="Net35"; NuGetDir = "net35"; Framework="net-2.0"},
@@ -90,11 +90,7 @@ task Package -depends Build {
if ($buildNuGet)
{
- $nugetVersion = $majorWithReleaseVersion
- if ($nugetPrelease -ne $null)
- {
- $nugetVersion = $nugetVersion + "-" + $nugetPrelease
- }
+ $nugetVersion = GetNuGetVersion
New-Item -Path $workingDir\NuGet -ItemType Directory
@@ -136,6 +132,7 @@ task Package -depends Build {
Write-Host
exec { .\Tools\NuGet\NuGet.exe pack $nuspecPath -Symbols }
+ exec { dotnet pack $workingSourceDir\Newtonsoft.Json\project.json -c Release }
move -Path .\*.nupkg -Destination $workingDir\NuGet
}
@@ -204,36 +201,30 @@ function MSBuildBuild($build)
exec { msbuild "/t:Clean;Rebuild" /p:Configuration=Release "/p:CopyNuGetImplementations=true" "/p:Platform=Any CPU" "/p:PlatformTarget=AnyCPU" /p:OutputPath=bin\Release\$finalDir\ /p:AssemblyOriginatorKeyFile=$signKeyPath "/p:SignAssembly=$signAssemblies" "/p:TreatWarningsAsErrors=$treatWarningsAsErrors" "/p:VisualStudioVersion=14.0" /p:DefineConstants=`"$constants`" "$workingSourceDir\$name.sln" | Out-Default } "Error building $name"
}
-function DnxBuild($build)
+function NetCliBuild($build)
{
$name = $build.Name
$projectPath = "$workingSourceDir\Newtonsoft.Json\project.json"
- exec { dnvm install $dnvmVersion -r clr | Out-Default }
- exec { dnvm use $dnvmVersion -r clr | Out-Default }
+ exec { .\Tools\Dotnet\install.ps1 -Version $netCliVersion | Out-Default }
Write-Host -ForegroundColor Green "Restoring packages for $name"
Write-Host
- exec { dnu restore $projectPath | Out-Default }
+ exec { dotnet restore $projectPath | Out-Default }
Write-Host -ForegroundColor Green "Building $projectPath"
- exec { dnu build $projectPath --configuration Release | Out-Default }
+ exec { dotnet build $projectPath -f netstandard1.0 -c Release -o bin\Release\netstandard1.0 | Out-Default }
}
-function DnxTests($build)
+function NetCliTests($build)
{
$name = $build.TestsName
- #Write-Host -ForegroundColor Green "Ensuring latest CoreCLR is installed for $name"
- #Write-Host
- #exec { & $toolsDir\Kvm\kvm.ps1 upgrade -r CoreCLR -NoNative | Out-Default }
-
- exec { dnvm install $dnvmVersion -r coreclr | Out-Default }
- exec { dnvm use $dnvmVersion -r coreclr | Out-Default }
+ exec { .\Tools\Dotnet\install.ps1 -Version $netCliVersion | Out-Default }
Write-Host -ForegroundColor Green "Restoring packages for $name"
Write-Host
- exec { dnu restore "$workingSourceDir\Newtonsoft.Json.Tests\project.json" | Out-Default }
+ exec { dotnet restore "$workingSourceDir\Newtonsoft.Json.Tests\project.json" | Out-Default }
Write-Host -ForegroundColor Green "Ensuring test project builds for $name"
Write-Host
@@ -241,7 +232,7 @@ function DnxTests($build)
try
{
Set-Location "$workingSourceDir\Newtonsoft.Json.Tests"
- exec { dnx --configuration Release test | Out-Default }
+ exec { dotnet test "$workingSourceDir\Newtonsoft.Json.Tests\project.json" -f netcoreapp1.0 -c Release -parallel none | Out-Default }
}
finally
{
@@ -266,6 +257,17 @@ function NUnitTests($build)
exec { .\Tools\NUnit\nunit-console.exe "$workingDir\Deployed\Bin\$finalDir\Newtonsoft.Json.Tests.dll" /framework=$framework /xml:$workingDir\$name.xml | Out-Default } "Error running $name tests"
}
+function GetNuGetVersion()
+{
+ $nugetVersion = $majorWithReleaseVersion
+ if ($nugetPrelease -ne $null)
+ {
+ $nugetVersion = $nugetVersion + "-" + $nugetPrelease
+ }
+
+ return $nugetVersion
+}
+
function GetConstants($constants, $includeSigned)
{
$signed = switch($includeSigned) { $true { ";SIGNED" } default { "" } }
@@ -345,9 +347,11 @@ function Update-Project {
$file = switch($sign) { $true { $signKeyPath } default { $null } }
$json = (Get-Content $projectPath) -join "`n" | ConvertFrom-Json
- $options = @{"warningsAsErrors" = $true; "keyFile" = $file; "define" = ((GetConstants "dotnet" $sign) -split ";") }
+ $options = @{"warningsAsErrors" = $true; "xmlDoc" = $true; "keyFile" = $file; "define" = ((GetConstants "dotnet" $sign) -split ";") }
Add-Member -InputObject $json -MemberType NoteProperty -Name "compilationOptions" -Value $options -Force
+ $json.version = GetNuGetVersion
+
ConvertTo-Json $json -Depth 10 | Set-Content $projectPath
}
diff --git a/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs b/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs
index 846978b1..9356d94e 100644
--- a/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs
+++ b/Src/Newtonsoft.Json.Tests/Properties/AssemblyInfo.cs
@@ -31,7 +31,9 @@ using System.Security;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-#if PORTABLE40
+#if NETSTANDARD10
+[assembly: AssemblyTitle("Json.NET Tests .NET Standard 1.0")]
+#elif PORTABLE40
[assembly: AssemblyTitle("Json.NET Tests Portable .NET 4.0")]
#elif PORTABLE
[assembly: AssemblyTitle("Json.NET Tests Portable")]
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/DefaultValueHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/DefaultValueHandlingTests.cs
index 8f4a0a62..ec1092f4 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/DefaultValueHandlingTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/DefaultValueHandlingTests.cs
@@ -27,7 +27,7 @@ using System;
using System.ComponentModel;
using System.IO;
using System.Runtime.Serialization;
-#if !(NET20 || NET35 || NETFX_CORE || PORTABLE)
+#if !(NET20 || NET35 || NETFX_CORE || PORTABLE || DNXCORE50)
using System.Runtime.Serialization.Json;
#endif
using System.Text;
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs
index cb37f805..b1342c77 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs
@@ -5286,7 +5286,7 @@ Path '', line 1, position 1.");
}
#endif
-#if !NETFX_CORE
+#if !(NETFX_CORE || DNXCORE50)
public class XmlNodeTestObject
{
public XmlDocument Document { get; set; }
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/ReflectionAttributeProviderTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/ReflectionAttributeProviderTests.cs
index dad49a58..d16dc63f 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/ReflectionAttributeProviderTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/ReflectionAttributeProviderTests.cs
@@ -71,7 +71,12 @@ namespace Newtonsoft.Json.Tests.Serialization
[Test]
public void GetAttributes_Property()
{
- PropertyInfo property = typeof(ReflectionTestObject).GetProperty("TestProperty");
+ PropertyInfo property;
+#if DNXCORE50
+ property = Newtonsoft.Json.Utilities.TypeExtensions.GetProperty(typeof(ReflectionTestObject), "TestProperty");
+#else
+ property = typeof(ReflectionTestObject).GetProperty("TestProperty");
+#endif
ReflectionAttributeProvider provider = new ReflectionAttributeProvider(property);
@@ -85,7 +90,12 @@ namespace Newtonsoft.Json.Tests.Serialization
[Test]
public void GetAttributes_Field()
{
- FieldInfo field = (FieldInfo)typeof(ReflectionTestObject).GetField("TestField");
+ FieldInfo field;
+#if DNXCORE50
+ field = (FieldInfo)Newtonsoft.Json.Utilities.TypeExtensions.GetField(typeof(ReflectionTestObject), "TestField");
+#else
+ field = typeof(ReflectionTestObject).GetField("TestField");
+#endif
ReflectionAttributeProvider provider = new ReflectionAttributeProvider(field);
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/SerializationErrorHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/SerializationErrorHandlingTests.cs
index 1844246f..a3099970 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/SerializationErrorHandlingTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/SerializationErrorHandlingTests.cs
@@ -74,11 +74,14 @@ namespace Newtonsoft.Json.Tests.Serialization
var possibleMsgs = new[]
{
"[1] - Error message for member 1 = An item with the same key has already been added.",
- "[1] - Error message for member 1 = An element with the same key already exists in the dictionary." // mono
+ "[1] - Error message for member 1 = An element with the same key already exists in the dictionary.", // mono
+ "[1] - Error message for member 1 = An item with the same key has already been added. Key: Jim" // netcore
};
VersionKeyedCollection c = JsonConvert.DeserializeObject(json);
Assert.AreEqual(1, c.Count);
Assert.AreEqual(1, c.Messages.Count);
+
+ Console.WriteLine(c.Messages[0]);
Assert.IsTrue(possibleMsgs.Any(m => m == c.Messages[0]), "Expected One of: " + Environment.NewLine + string.Join(Environment.NewLine, possibleMsgs) + Environment.NewLine + "Was: " + Environment.NewLine + c.Messages[0]);
}
diff --git a/Src/Newtonsoft.Json.Tests/Serialization/WebApiIntegrationTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/WebApiIntegrationTests.cs
index 6e748b1c..915e837f 100644
--- a/Src/Newtonsoft.Json.Tests/Serialization/WebApiIntegrationTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Serialization/WebApiIntegrationTests.cs
@@ -41,7 +41,7 @@ using Assert = Newtonsoft.Json.Tests.XUnitAssert;
#else
using NUnit.Framework;
#endif
-#if !(NETFX_CORE || NET20 || NET35)
+#if !(NETFX_CORE || NET20 || NET35 || DNXCORE50)
using System.Runtime.Serialization.Json;
#endif
using Newtonsoft.Json.Serialization;
diff --git a/Src/Newtonsoft.Json.Tests/TestObjects/ListOfIds.cs b/Src/Newtonsoft.Json.Tests/TestObjects/ListOfIds.cs
index 9333c511..23ef39cd 100644
--- a/Src/Newtonsoft.Json.Tests/TestObjects/ListOfIds.cs
+++ b/Src/Newtonsoft.Json.Tests/TestObjects/ListOfIds.cs
@@ -66,7 +66,11 @@ namespace Newtonsoft.Json.Tests.TestObjects
public override bool CanConvert(Type objectType)
{
+#if DNXCORE50
+ return Newtonsoft.Json.Utilities.TypeExtensions.IsAssignableFrom(typeof(IList), objectType);
+#else
return typeof(IList).IsAssignableFrom(objectType);
+#endif
}
}
}
\ No newline at end of file
diff --git a/Src/Newtonsoft.Json.Tests/project.json b/Src/Newtonsoft.Json.Tests/project.json
index 5c105e65..72897fff 100644
--- a/Src/Newtonsoft.Json.Tests/project.json
+++ b/Src/Newtonsoft.Json.Tests/project.json
@@ -7,11 +7,9 @@
"target": "project"
}
},
- "commands": {
- "test": "xunit.runner.dnx -parallel none"
- },
+ "testRunner": "xunit",
"frameworks": {
- "net45": {
+ /*"net45": {
"frameworkAssemblies": {
"System.Collections": "",
"System.ComponentModel.DataAnnotations": "",
@@ -38,7 +36,6 @@
},
"net40": {
"frameworkAssemblies": {
- "System.Collections": "",
"System.ComponentModel.DataAnnotations": "",
"System.Data": "",
"System.Data.DataSetExtensions": "",
@@ -46,7 +43,6 @@
"System.Data.Linq": "",
"System.Drawing": "",
"System.Numerics": "",
- "System.Runtime": "",
"System.Runtime.Serialization": "",
"System.Web": "",
"System.Web.Extensions": "",
@@ -87,40 +83,27 @@
"dependencies": {
"NUnit": "2.6.4"
}
- },
- "dnxcore50": {
+ },*/
+ "netcoreapp1.0": {
+ "compilationOptions": {
+ "define": [ "NETSTANDARD10", "DNXCORE50", "PORTABLE" ]
+ },
"dependencies": {
- "Microsoft.CSharp": "4.0.0",
- "System.Collections": "4.0.10",
- "System.Collections.Immutable": "1.1.37",
- "System.ComponentModel.TypeConverter": "4.0.0",
- "System.Diagnostics.Debug": "4.0.10",
- "System.Dynamic.Runtime": "4.0.10",
- "System.Globalization": "4.0.10",
- "System.IO": "4.0.10",
- "System.Linq": "4.0.0",
- "System.Linq.Expressions": "4.0.10",
- "System.Reflection.Emit.ILGeneration": "4.0.0",
- "System.Reflection.Extensions": "4.0.0",
- "System.Reflection.TypeExtensions": "4.0.0",
- "System.Runtime": "4.0.20",
- "System.Runtime.Extensions": "4.0.10",
- "System.Runtime.Numerics": "4.0.0",
- "System.Runtime.Serialization.Json": "4.0.0",
- "System.Runtime.Serialization.Primitives": "4.0.10",
- "System.Runtime.Serialization.Xml": "4.0.10",
- "System.Text.Encoding": "4.0.10",
- "System.Text.Encoding.CodePages": "4.0.0",
- "System.Text.Encoding.Extensions": "4.0.10",
- "System.Text.RegularExpressions": "4.0.10",
- "System.Threading": "4.0.10",
- "System.Xml.ReaderWriter": "4.0.10",
- "System.Xml.XDocument": "4.0.10",
- "System.Xml.XmlDocument": "4.0.0",
- "System.Xml.XmlSerializer": "4.0.10",
- "xunit": "2.1.0-*",
- "xunit.runner.dnx": "2.1.0-rc1-build204"
- }
+ "Microsoft.NETCore.App": {
+ "type": "platform",
+ "version": "1.0.0-rc2-24027"
+ },
+ "System.Runtime.Serialization.Primitives": "4.1.1-rc2-24027",
+ "System.Xml.XmlSerializer": "4.0.11-rc2-24027",
+ "System.Runtime.Serialization.Json": "4.0.2-rc2-24027",
+ "System.Runtime.Serialization.Xml": "4.1.1-rc2-24027",
+ "xunit": "2.1.0",
+ "dotnet-test-xunit": "1.0.0-rc2-173361-36"
+ },
+ "imports": [
+ "dnxcore50",
+ "portable-net45+win8"
+ ]
}
}
}
\ No newline at end of file
diff --git a/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs b/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs
index bfc61ab8..62cc370e 100644
--- a/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs
+++ b/Src/Newtonsoft.Json/Properties/AssemblyInfo.cs
@@ -32,7 +32,9 @@ using System.Security;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
-#if PORTABLE40
+#if NETSTANDARD10
+[assembly: AssemblyTitle("Json.NET .NET Standard 1.0")]
+#elif PORTABLE40
[assembly: AssemblyTitle("Json.NET Portable .NET 4.0")]
#elif PORTABLE
[assembly: AssemblyTitle("Json.NET Portable")]
@@ -48,7 +50,6 @@ using System.Security;
[assembly: AssemblyTitle("Json.NET .NET 4.0")]
[assembly: AllowPartiallyTrustedCallers]
#else
-
[assembly: AssemblyTitle("Json.NET")]
[assembly: AllowPartiallyTrustedCallers]
#endif
diff --git a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs
index bf970338..52c7b819 100644
--- a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs
+++ b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs
@@ -40,7 +40,6 @@ using System.Runtime.Serialization;
#if !(DOTNET || PORTABLE || PORTABLE40)
using System.Security.Permissions;
#endif
-using System.Xml.Serialization;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Utilities;
using Newtonsoft.Json.Linq;
diff --git a/Src/Newtonsoft.Json/project.json b/Src/Newtonsoft.Json/project.json
index 2b461622..b9a9e4b0 100644
--- a/Src/Newtonsoft.Json/project.json
+++ b/Src/Newtonsoft.Json/project.json
@@ -1,5 +1,5 @@
{
- "version": "7.0.2-beta1",
+ "version": "1.0.0-*",
"title": "Json.NET",
"description": "Json.NET is a popular high-performance JSON framework for .NET",
"authors": [ "James Newton-King" ],
@@ -61,6 +61,7 @@
"System.ObjectModel": "",
"System.Reflection": "",
"System.Reflection.Extensions": "",
+ "System.Resources.ResourceManager": "",
"System.Runtime": "",
"System.Runtime.Extensions": "",
"System.Runtime.Serialization": "",
@@ -88,32 +89,33 @@
"System.Xml": ""
}
},
- "dotnet": {
+ "netstandard1.0": {
+ "compilationOptions": {
+ "define": [ "NETSTANDARD10", "PORTABLE" ]
+ },
"dependencies": {
- "Microsoft.CSharp": "4.0.0",
- "System.Collections": "4.0.10",
- "System.Collections.Concurrent": "4.0.10",
- "System.ComponentModel.TypeConverter": "4.0.0",
- "System.Diagnostics.Debug": "4.0.10",
- "System.Dynamic.Runtime": "4.0.10",
- "System.Globalization": "4.0.10",
- "System.IO": "4.0.10",
- "System.Linq": "4.0.0",
- "System.Linq.Expressions": "4.0.10",
- "System.ObjectModel": "4.0.10",
- "System.Reflection": "4.0.10",
- "System.Reflection.Extensions": "4.0.0",
- "System.Runtime": "4.0.20",
- "System.Runtime.Extensions": "4.0.10",
- "System.Runtime.Numerics": "4.0.0",
- "System.Runtime.Serialization.Primitives": "4.0.10",
- "System.Text.Encoding": "4.0.10",
- "System.Text.Encoding.Extensions": "4.0.10",
- "System.Text.RegularExpressions": "4.0.10",
- "System.Threading": "4.0.10",
- "System.Threading.Tasks": "4.0.10",
- "System.Xml.ReaderWriter": "4.0.10",
- "System.Xml.XDocument": "4.0.10"
+ "Microsoft.CSharp": "4.0.1-rc2-24027",
+ "System.Collections": "4.0.11-rc2-24027",
+ "System.Diagnostics.Debug": "4.0.11-rc2-24027",
+ "System.Dynamic.Runtime": "4.0.11-rc2-24027",
+ "System.Globalization": "4.0.11-rc2-24027",
+ "System.IO": "4.1.0-rc2-24027",
+ "System.Linq": "4.1.0-rc2-24027",
+ "System.Linq.Expressions": "4.0.11-rc2-24027",
+ "System.ObjectModel": "4.0.12-rc2-24027",
+ "System.Reflection": "4.1.0-rc2-24027",
+ "System.Reflection.Extensions": "4.0.1-rc2-24027",
+ "System.Resources.ResourceManager": "4.0.1-rc2-24027",
+ "System.Runtime": "4.1.0-rc2-24027",
+ "System.Runtime.Extensions": "4.1.0-rc2-24027",
+ "System.Runtime.Serialization.Primitives": "4.1.1-rc2-24027",
+ "System.Text.Encoding": "4.0.11-rc2-24027",
+ "System.Text.Encoding.Extensions": "4.0.11-rc2-24027",
+ "System.Text.RegularExpressions": "4.0.12-rc2-24027",
+ "System.Threading": "4.0.11-rc2-24027",
+ "System.Threading.Tasks": "4.0.11-rc2-24027",
+ "System.Xml.ReaderWriter": "4.0.11-rc2-24027",
+ "System.Xml.XDocument": "4.0.11-rc2-24027"
}
}
}
diff --git a/Src/NuGet.Config b/Src/NuGet.Config
index 8b8ba5bc..1be2d76e 100644
--- a/Src/NuGet.Config
+++ b/Src/NuGet.Config
@@ -3,8 +3,8 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/Src/global.json b/Src/global.json
index ae0a7539..0ddf69c7 100644
--- a/Src/global.json
+++ b/Src/global.json
@@ -1,6 +1,3 @@
{
- "projects": [ "src" ],
- "sdk": {
- "version": "1.0.0-rc1-update1"
- }
-}
+ "projects": [ "src" ]
+}
\ No newline at end of file
diff --git a/Tools/Dotnet/install.ps1 b/Tools/Dotnet/install.ps1
new file mode 100644
index 00000000..8b0ac72d
--- /dev/null
+++ b/Tools/Dotnet/install.ps1
@@ -0,0 +1,338 @@
+#
+# Copyright (c) .NET Foundation and contributors. All rights reserved.
+# Licensed under the MIT license. See LICENSE file in the project root for full license information.
+#
+
+<#
+.SYNOPSIS
+ Installs dotnet cli
+.DESCRIPTION
+ Installs dotnet cli. If dotnet installation already exists in the given directory
+ it will update it only if the requested version differs from the one already installed.
+.PARAMETER Channel
+ Default: preview
+ Channel is the way of reasoning about stability and quality of dotnet. This parameter takes one of the values:
+ - future - Possibly unstable, frequently changing, may contain new finished and unfinished features
+ - preview - Pre-release stable with known issues and feature gaps
+ - production - Most stable releases
+.PARAMETER Version
+ Default: latest
+ Represents a build version on specific channel. Possible values:
+ - 4-part version in a format A.B.C.D - represents specific version of build
+ - latest - most latest build on specific channel
+ - lkg - last known good version on specific channel
+ Note: LKG work is in progress. Once the work is finished, this will become new default
+.PARAMETER InstallDir
+ Default: %LocalAppData%\Microsoft\dotnet
+ Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
+.PARAMETER Architecture
+ Default: - this value represents currently running OS architecture
+ Architecture of dotnet binaries to be installed.
+ Possible values are: , x64 and x86
+.PARAMETER DebugSymbols
+ If set the installer will include symbols in the installation.
+.PARAMETER DryRun
+ If set it will not perform installation but instead display what command line to use to consistently install
+ currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link
+ with specific version so that this command can be used deterministicly in a build script.
+ It also displays binaries location if you prefer to install or download it yourself.
+.PARAMETER NoPath
+ By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder.
+ If set it will display binaries location but not set any environment variable.
+.PARAMETER Verbose
+ Displays diagnostics information.
+.PARAMETER AzureFeed
+ Default: https://dotnetcli.blob.core.windows.net/dotnet
+ This parameter should not be usually changed by user. It allows to change URL for the Azure feed used by this installer.
+#>
+[cmdletbinding()]
+param(
+ [string]$Channel="preview",
+ [string]$Version="Latest",
+ [string]$InstallDir="",
+ [string]$Architecture="",
+ [switch]$DebugSymbols, # TODO: Switch does not work yet. Symbols zip is not being uploaded yet.
+ [switch]$DryRun,
+ [switch]$NoPath,
+ [string]$AzureFeed="https://dotnetcli.blob.core.windows.net/dotnet"
+)
+
+Set-StrictMode -Version Latest
+$ErrorActionPreference="Stop"
+$ProgressPreference="SilentlyContinue"
+
+$BinFolderRelativePath=""
+
+# example path with regex: shared/1.0.0-beta-12345/somepath
+$VersionRegEx="/\d+\.\d+[^/]+/"
+$OverrideNonVersionedFiles=$true
+
+function Say($str) {
+ Write-Host "dotnet_install: $str"
+}
+
+function Say-Verbose($str) {
+ Write-Verbose "dotnet_install: $str"
+}
+
+function Say-Invocation($Invocation) {
+ $command = $Invocation.MyCommand;
+ $args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
+ Say-Verbose "$command $args"
+}
+
+function Get-Machine-Architecture() {
+ Say-Invocation $MyInvocation
+
+ # possible values: AMD64, IA64, x86
+ return $ENV:PROCESSOR_ARCHITECTURE
+}
+
+# TODO: Architecture and CLIArchitecture should be unified
+function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
+ Say-Invocation $MyInvocation
+
+ switch ($Architecture.ToLower()) {
+ { $_ -eq "" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) }
+ { ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
+ { $_ -eq "x86" } { return "x86" }
+ default { throw "Architecture not supported. If you think this is a bug, please report it at https://github.com/dotnet/cli/issues" }
+ }
+}
+
+function Get-Version-Info-From-Version-Text([string]$VersionText) {
+ Say-Invocation $MyInvocation
+
+ $Data = @($VersionText.Split([char[]]@(), [StringSplitOptions]::RemoveEmptyEntries));
+
+ $VersionInfo = @{}
+ $VersionInfo.CommitHash = $Data[0].Trim()
+ $VersionInfo.Version = $Data[1].Trim()
+ return $VersionInfo
+}
+
+function Get-Latest-Version-Info([string]$AzureFeed, [string]$AzureChannel, [string]$CLIArchitecture) {
+ Say-Invocation $MyInvocation
+
+ $VersionFileUrl = "$AzureFeed/$AzureChannel/dnvm/latest.win.$CLIArchitecture.version"
+ $Response = Invoke-WebRequest -UseBasicParsing $VersionFileUrl
+ $VersionText = [Text.Encoding]::UTF8.GetString($Response.Content)
+
+ $VersionInfo = Get-Version-Info-From-Version-Text $VersionText
+
+ return $VersionInfo
+}
+
+# TODO: AzureChannel and Channel should be unified
+function Get-Azure-Channel-From-Channel([string]$Channel) {
+ Say-Invocation $MyInvocation
+
+ # For compatibility with build scripts accept also directly Azure channels names
+ switch ($Channel.ToLower()) {
+ { ($_ -eq "future") -or ($_ -eq "dev") } { return "dev" }
+ { ($_ -eq "preview") -or ($_ -eq "beta") } { return "beta" }
+ { $_ -eq "production" } { throw "Production channel does not exist yet" }
+ default { throw "``$Channel`` is an invalid channel name. Use one of the following: ``future``, ``preview``, ``production``" }
+ }
+}
+
+function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$AzureChannel, [string]$CLIArchitecture, [string]$Version) {
+ Say-Invocation $MyInvocation
+
+ switch ($Version.ToLower()) {
+ { $_ -eq "latest" } {
+ $LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -AzureChannel $AzureChannel -CLIArchitecture $CLIArchitecture
+ return $LatestVersionInfo.Version
+ }
+ { $_ -eq "lkg" } { throw "``-Version LKG`` not supported yet." }
+ default { return $Version }
+ }
+}
+
+function Get-Download-Links([string]$AzureFeed, [string]$AzureChannel, [string]$SpecificVersion, [string]$CLIArchitecture) {
+ Say-Invocation $MyInvocation
+
+ $ret = @()
+ $files = @("dotnet-dev")
+
+ foreach ($file in $files) {
+ $PayloadURL = "$AzureFeed/$AzureChannel/Binaries/$SpecificVersion/$file-win-$CLIArchitecture.$SpecificVersion.zip"
+ Say-Verbose "Constructed payload URL: $PayloadURL"
+ $ret += $PayloadURL
+ }
+
+ return $ret
+}
+
+function Get-User-Share-Path() {
+ Say-Invocation $MyInvocation
+
+ $InstallRoot = $env:DOTNET_INSTALL_DIR
+ if (!$InstallRoot) {
+ $InstallRoot = "$env:LocalAppData\Microsoft\dotnet"
+ }
+ return $InstallRoot
+}
+
+function Resolve-Installation-Path([string]$InstallDir) {
+ Say-Invocation $MyInvocation
+
+ if ($InstallDir -eq "") {
+ return Get-User-Share-Path
+ }
+ return $InstallDir
+}
+
+function Get-Version-Info-From-Version-File([string]$InstallRoot, [string]$RelativePathToVersionFile) {
+ Say-Invocation $MyInvocation
+
+ $VersionFile = Join-Path -Path $InstallRoot -ChildPath $RelativePathToVersionFile
+ Say-Verbose "Local version file: $VersionFile"
+
+ if (Test-Path $VersionFile) {
+ $VersionText = cat $VersionFile
+ Say-Verbose "Local version file text: $VersionText"
+ return Get-Version-Info-From-Version-Text $VersionText
+ }
+
+ Say-Verbose "Local version file not found."
+
+ return $null
+}
+
+function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
+ Say-Invocation $MyInvocation
+
+ $DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion
+ Say-Verbose "Is-Dotnet-Package-Installed: Path to a package: $DotnetPackagePath"
+ return Test-Path $DotnetPackagePath -PathType Container
+}
+
+function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
+ # Too much spam
+ # Say-Invocation $MyInvocation
+
+ return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath)
+}
+
+function Get-Path-Prefix-With-Version($path) {
+ $match = [regex]::match($path, $VersionRegEx)
+ if ($match.Success) {
+ return $entry.FullName.Substring(0, $match.Index + $match.Length)
+ }
+
+ return $null
+}
+
+function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) {
+ Say-Invocation $MyInvocation
+
+ $ret = @()
+ foreach ($entry in $Zip.Entries) {
+ $dir = Get-Path-Prefix-With-Version $entry.FullName
+ if ($dir -ne $null) {
+ $path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
+ if (-Not (Test-Path $path -PathType Container)) {
+ $ret += $dir
+ }
+ }
+ }
+
+ $ret = $ret | Sort-Object | Get-Unique
+
+ $values = ($ret | foreach { "$_" }) -join ";"
+ Say-Verbose "Directories to unpack: $values"
+
+ return $ret
+}
+
+# Example zip content and extraction algorithm:
+# Rule: files if extracted are always being extracted to the same relative path locally
+# .\
+# a.exe # file does not exist locally, extract
+# b.dll # file exists locally, override only if $OverrideFiles set
+# aaa\ # same rules as for files
+# ...
+# abc\1.0.0\ # directory contains version and exists locally
+# ... # do not extract content under versioned part
+# abc\asd\ # same rules as for files
+# ...
+# def\ghi\1.0.1\ # directory contains version and does not exist locally
+# ... # extract content
+function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
+ Say-Invocation $MyInvocation
+
+ Add-Type -Assembly System.IO.Compression.FileSystem | Out-Null
+ Set-Variable -Name Zip
+ try {
+ $Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
+
+ $DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath
+
+ foreach ($entry in $Zip.Entries) {
+ $PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
+ if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
+ $DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
+ $DestinationDir = Split-Path -Parent $DestinationPath
+ $OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
+ if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) {
+ New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null
+ [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles)
+ }
+ }
+ }
+ }
+ finally {
+ if ($Zip -ne $null) {
+ $Zip.Dispose()
+ }
+ }
+}
+
+$AzureChannel = Get-Azure-Channel-From-Channel -Channel $Channel
+$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
+$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -AzureChannel $AzureChannel -CLIArchitecture $CLIArchitecture -Version $Version
+$DownloadLinks = Get-Download-Links -AzureFeed $AzureFeed -AzureChannel $AzureChannel -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
+
+if ($DryRun) {
+ Say "Payload URLs:"
+ foreach ($DownloadLink in $DownloadLinks) {
+ Say "- $DownloadLink"
+ }
+ Say "Repeatable invocation: .\$($MyInvocation.MyCommand) -Version $SpecificVersion -Channel $Channel -Architecture $CLIArchitecture -InstallDir $InstallDir"
+ return
+}
+
+$InstallRoot = Resolve-Installation-Path $InstallDir
+Say-Verbose "InstallRoot: $InstallRoot"
+
+$IsSdkInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage "sdk" -SpecificVersion $SpecificVersion
+Say-Verbose ".NET SDK installed? $IsSdkInstalled"
+if ($IsSdkInstalled) {
+ Say ".NET SDK version $SpecificVersion is already installed."
+ return
+}
+
+New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
+
+foreach ($DownloadLink in $DownloadLinks) {
+ $ZipPath = [System.IO.Path]::GetTempFileName()
+ Say "Downloading $DownloadLink"
+ $resp = Invoke-WebRequest -UseBasicParsing $DownloadLink -OutFile $ZipPath
+
+ Say "Extracting zip from $DownloadLink"
+ Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
+
+ Remove-Item $ZipPath
+}
+
+$BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath)
+if (-Not $NoPath) {
+ Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process."
+ $env:path += ";$BinPath"
+}
+else {
+ Say "Binaries of dotnet can be found in $BinPath"
+}
+
+Say "Installation finished"
diff --git a/Tools/NuGet/NuGet.exe b/Tools/NuGet/NuGet.exe
index 9f8781de..31fc9885 100644
Binary files a/Tools/NuGet/NuGet.exe and b/Tools/NuGet/NuGet.exe differ