diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
index 76864c0..8e20101 100644
--- a/DEPLOYMENT.md
+++ b/DEPLOYMENT.md
@@ -8,12 +8,12 @@ are passing, and you're happy with the state of things...
1. Create a branch named `release`
1. Update [`ReleaseNotes.md`](ReleaseNotes.md), following the existing format
-1. Bump the version number in [`SolutionInfo.cs`](SolutionInfo.cs) and the `.nuspec` and `appveyor.yml` files (if required)
+1. Bump the version number in [`Directory.build.props`](Directory.build.props) and [`appveyor.yml`](appveyor.yml)
1. Push the branch to GitHub and create a pull request
-1. Run `.\build CreatePackages` to create the NuGet packages (locally) for the new version
+1. If the build succeeds, accept the pull request
+1. Create and push a tag from the new HEAD `git tag v#.#.#` and `git push --tags`
+1. Create the NuGet packages (in the local solution root) for the new version: `dotnet pack --output ..\`
1. Test the NuGet packages! [How to install NuGet package locally](http://stackoverflow.com/questions/10240029/how-to-install-a-nuget-package-nupkg-file-locally)
-1. If satisfied with the release, push the new packages up to NuGet
-1. Accept the pull request
-1. Create a tag `git tag v#.#.#`. For example, to create a tag for 1.0.0 `git tag v1.0.0`
1. [Create a new release](https://help.github.com/articles/creating-releases) using the tag
you just created and pasting in the release notes you just wrote up. Attach a copy of the latest `.nupkg` files generated above.
+1. Push the new packages up to NuGet `dotnet nuget push`
diff --git a/Directory.build.props b/Directory.build.props
new file mode 100644
index 0000000..bb9a026
--- /dev/null
+++ b/Directory.build.props
@@ -0,0 +1,11 @@
+
+
+ City of Santa Monica, CA
+ City of Santa Monica, CA
+ Copyright 2019 City of Santa Monica, CA
+ SODA
+ https://github.com/CityofSantaMonica/SODA.NET
+ MIT
+ 0.9.0
+
+
\ No newline at end of file
diff --git a/Net45.SODA.Tests/Net45.SODA.Tests.csproj b/Net45.SODA.Tests/Net45.SODA.Tests.csproj
new file mode 100644
index 0000000..c08b6f0
--- /dev/null
+++ b/Net45.SODA.Tests/Net45.SODA.Tests.csproj
@@ -0,0 +1,23 @@
+
+
+
+ net45
+
+ false
+
+ Net45.SODA.Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Net45.Utilities.Tests/Net45.Utilities.Tests.csproj b/Net45.Utilities.Tests/Net45.Utilities.Tests.csproj
new file mode 100644
index 0000000..667409d
--- /dev/null
+++ b/Net45.Utilities.Tests/Net45.Utilities.Tests.csproj
@@ -0,0 +1,24 @@
+
+
+
+ net45
+
+ false
+
+ Net45.SODA.Utilities.Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NetCore22.SODA.Tests/NetCore22.SODA.Tests.csproj b/NetCore22.SODA.Tests/NetCore22.SODA.Tests.csproj
new file mode 100644
index 0000000..a2a2e0d
--- /dev/null
+++ b/NetCore22.SODA.Tests/NetCore22.SODA.Tests.csproj
@@ -0,0 +1,23 @@
+
+
+
+ netcoreapp2.2
+
+ false
+
+ NetCore22.SODA.Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NetCore22.Utilities.Tests/NetCore22.Utilities.Tests.csproj b/NetCore22.Utilities.Tests/NetCore22.Utilities.Tests.csproj
new file mode 100644
index 0000000..748c959
--- /dev/null
+++ b/NetCore22.Utilities.Tests/NetCore22.Utilities.Tests.csproj
@@ -0,0 +1,25 @@
+
+
+
+ netcoreapp2.2
+
+ false
+
+ NetCore22.SODA.Utilities.Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 768926e..c7b6dcf 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -1,3 +1,9 @@
+### New in 0.9.0 (Released 2019/07/24)
+
+New features
+
+ - Support for .NET Core 2.2
+
### New in 0.8.0 (Released 2017/12/06)
Bug fixes
diff --git a/SODA.Tests/HumanAddressTests.cs b/SODA.Tests/HumanAddressTests.cs
index 1e6a862..0acecab 100644
--- a/SODA.Tests/HumanAddressTests.cs
+++ b/SODA.Tests/HumanAddressTests.cs
@@ -28,11 +28,10 @@ public void New_Deserializes_Valid_HumanAddress_Json()
[TestCase("not json")]
[TestCase(@"{""not"":""a"",""human"":""address""}")]
- [ExpectedException(typeof(ArgumentOutOfRangeException))]
[Category("HumanAddress")]
public void New_Throws_ArgumentOutOfRangeException_For_Invalid_HumanAddress_Json(string input)
{
- new HumanAddress(input);
+ Assert.That(() => new HumanAddress(input), Throws.TypeOf());
}
[Test]
diff --git a/SODA.Tests/PhoneColumnTest.cs b/SODA.Tests/PhoneColumnTest.cs
index 5b284a8..7344380 100644
--- a/SODA.Tests/PhoneColumnTest.cs
+++ b/SODA.Tests/PhoneColumnTest.cs
@@ -88,11 +88,10 @@ public void New_Deserializes_PhoneColumn_For_No_Type_Json()
[TestCase("not json")]
[TestCase(@"{""not"":""a"",""valid"":""phone""}")]
- [ExpectedException(typeof(ArgumentOutOfRangeException))]
[Category("PhoneColumn")]
public void New_Throws_ArgumentOutOfRangeException_For_Invalid_PhoneColumn_Json(string input)
{
- new PhoneColumn(input);
+ Assert.That(() => new PhoneColumn(input), Throws.TypeOf());
}
}
}
diff --git a/SODA.Tests/Properties/AssemblyInfo.cs b/SODA.Tests/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7bd4013..0000000
--- a/SODA.Tests/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// 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.
-[assembly: AssemblyTitle("SODA.Tests")]
-[assembly: AssemblyDescription("Test project for the SODA library.")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("City of Santa Monica")]
-[assembly: AssemblyProduct("SODA.Tests")]
-[assembly: AssemblyCopyright("Copyright © City of Santa Monica 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("7f9cf47c-8168-48eb-82b3-a82249c0346e")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/SODA.Tests/ResourceTests.cs b/SODA.Tests/ResourceTests.cs
index 8989ad1..c7496d1 100644
--- a/SODA.Tests/ResourceTests.cs
+++ b/SODA.Tests/ResourceTests.cs
@@ -70,11 +70,10 @@ public void New_Gets_Metadata_Identifier()
[TestCase(StringMocks.EmptyInput)]
[TestCase(StringMocks.NullInput)]
- [ExpectedException(typeof(ArgumentException))]
[Category("Resource")]
public void GetRow_With_Invalid_RowId_Throws_ArugmentException(string input)
{
- new Resource