diff --git a/.ably/capabilities.yaml b/.ably/capabilities.yaml
index a1ab64a36..a38444fc1 100644
--- a/.ably/capabilities.yaml
+++ b/.ably/capabilities.yaml
@@ -4,6 +4,7 @@ common-version: 1.2.0
compliance:
Agent Identifier:
Agents:
+ Operating System:
Runtime:
Authentication:
API Key:
diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 3dc104b04..b9fc50005 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -2,11 +2,33 @@
"version": 1,
"isRoot": true,
"tools": {
+ "paket": {
+ "version": "7.2.0",
+ "commands": [
+ "paket"
+ ],
+ "_link": "https://github.com/fsprojects/Paket"
+ },
"fake-cli": {
- "version": "5.20.3",
+ "version": "5.23.1",
"commands": [
"fake"
- ]
+ ],
+ "_link": "https://github.com/fsprojects/FAKE"
+ },
+ "fsdocs-tool": {
+ "version": "17.2.0",
+ "commands": [
+ "fsdocs"
+ ],
+ "_link": "https://github.com/fsprojects/FSharp.Formatting"
+ },
+ "fantomas": {
+ "version": "5.1.5",
+ "commands": [
+ "fantomas"
+ ],
+ "_link": "https://github.com/fsprojects/fantomas"
}
}
}
\ No newline at end of file
diff --git a/.github/workflows/integration-test-linux.yml b/.github/workflows/integration-test-linux.yml
deleted file mode 100644
index 1dcebfaee..000000000
--- a/.github/workflows/integration-test-linux.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: "Integration Test: Linux"
-on:
- pull_request:
- push:
- branches:
- - main
-
-jobs:
- check:
- runs-on: ubuntu-latest
- env:
- DOTNET_NOLOGO: true
-
- steps:
- - uses: actions/checkout@v2
- with:
- submodules: 'recursive'
- - name: Download dotnet framework
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '3.1.x'
- - name: Download fake-cli
- run: dotnet tool install fake-cli --version 5.20.4 --tool-path .
- - name: Unit tests
- run: ./build.sh Test.NetStandard.Unit.WithRetry
- - name: Integration tests
- run: ./build.sh Test.NetStandard.Integration
diff --git a/.github/workflows/integration-test-macos.yml b/.github/workflows/integration-test-macos.yml
deleted file mode 100644
index f68dc0211..000000000
--- a/.github/workflows/integration-test-macos.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: "Integration Test: macOS"
-on:
- pull_request:
- push:
- branches:
- - main
-
-jobs:
- check:
- runs-on: macos-latest
- env:
- DOTNET_NOLOGO: true
-
- steps:
- - uses: actions/checkout@v2
- with:
- submodules: 'recursive'
- - name: Download dotnet framework
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '3.1.x'
- - name: Download fake-cli
- run: dotnet tool install fake-cli --version 5.20.4 --tool-path .
- - name: Restore packages
- run: |
- nuget restore ./src/IO.Ably.Xamarin.sln
- - name: Build Xamarin projects
- run: ./build.sh Build.Xamarin
- - name: Unit tests
- run: ./build.sh Test.NetStandard.Unit.WithRetry
- - name: Integration tests
- run: ./build.sh Test.NetStandard.Integration
diff --git a/.github/workflows/integration-test-windows.yml b/.github/workflows/integration-test-windows.yml
deleted file mode 100644
index 4e88c8140..000000000
--- a/.github/workflows/integration-test-windows.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: "Integration Test: Windows"
-on:
- pull_request:
- push:
- branches:
- - main
-
-jobs:
- check:
- runs-on: windows-latest
- env:
- DOTNET_NOLOGO: true
-
- strategy:
- matrix:
- target: [ "Test.NetStandard", "Test.NetFramework" ]
-
- steps:
- - uses: actions/checkout@v2
- with:
- submodules: 'recursive'
- - name: Download framework
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '3.1.x'
- - name: Download fake-cli
- run: dotnet tool install fake-cli --version 5.20.4 --tool-path .
- - name: Unit tests
- run: ./build.cmd ${{ matrix.target }}.Unit
- - name: Integration tests
- run: ./build.cmd ${{ matrix.target }}.Integration
diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml
index 6086fa3cc..5c3a69e06 100644
--- a/.github/workflows/package.yml
+++ b/.github/workflows/package.yml
@@ -14,11 +14,14 @@ jobs:
with:
submodules: 'recursive'
- name: Download dotnet framework
- uses: actions/setup-dotnet@v1
+ uses: actions/setup-dotnet@v3
with:
- dotnet-version: '3.1.x'
+ dotnet-version: |
+ 3.1.x
+ 6.0.x
+ 7.0.x
- name: Download fake-cli
- run: dotnet tool install fake-cli --version 5.20.4 --tool-path .
+ run: dotnet tool restore
- name: Package
run: ./package.cmd ${{ github.event.inputs.version }}
- name: Archive package
@@ -38,9 +41,12 @@ jobs:
with:
submodules: 'recursive'
- name: Download dotnet framework
- uses: actions/setup-dotnet@v1
+ uses: actions/setup-dotnet@v3
with:
- dotnet-version: '3.1.x'
+ dotnet-version: |
+ 3.1.x
+ 6.0.x
+ 7.0.x
- name: Download fake-cli
run: dotnet tool install fake-cli --version 5.20.4 --tool-path .
- name: Restore packages
diff --git a/.github/workflows/run-tests-linux.yml b/.github/workflows/run-tests-linux.yml
new file mode 100644
index 000000000..2c26b9003
--- /dev/null
+++ b/.github/workflows/run-tests-linux.yml
@@ -0,0 +1,37 @@
+name: "Unit and Integration Test: Linux"
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ env:
+ DOTNET_NOLOGO: true
+
+ strategy:
+ matrix:
+ targetframework: [ "net6.0", "net7.0" ]
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'recursive'
+
+ - name: Download dotnet framework
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 6.0.x
+ 7.0.x
+
+ - name: Download dotnet build-script tools
+ run: dotnet tool restore
+
+ - name: Unit tests
+ run: ./build.sh Test.NetStandard.Unit.WithRetry -f ${{ matrix.targetframework }}
+
+ - name: Integration tests
+ run: ./build.sh Test.NetStandard.Integration.WithRetry -f ${{ matrix.targetframework }}
diff --git a/.github/workflows/run-tests-macos-xamarin.yml b/.github/workflows/run-tests-macos-xamarin.yml
new file mode 100644
index 000000000..0d2666546
--- /dev/null
+++ b/.github/workflows/run-tests-macos-xamarin.yml
@@ -0,0 +1,39 @@
+name: "Unit and Integration Test: macOS (Xamarin)"
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ check:
+ runs-on: macos-latest
+ env:
+ DOTNET_NOLOGO: true
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'recursive'
+
+ - name: Download dotnet framework
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 3.1.x
+
+ - name: Download dotnet build-script tools
+ run: dotnet tool restore
+
+ - name: Install mono
+ run: |
+ ./tools/mono-install.sh
+
+ - name: Build Xamarin projects
+ run: ./build.sh Build.Xamarin
+
+ - name: Run Unit tests using mono
+ run: ./build.sh Test.NetFramework.Unit.WithRetry
+
+ - name: Run Integration tests using mono
+ run: ./build.sh Test.NetFramework.Integration.WithRetry
diff --git a/.github/workflows/run-tests-macos.yml b/.github/workflows/run-tests-macos.yml
new file mode 100644
index 000000000..2c9ac1edd
--- /dev/null
+++ b/.github/workflows/run-tests-macos.yml
@@ -0,0 +1,37 @@
+name: "Unit and Integration Test: macOS"
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ check:
+ runs-on: macos-latest
+ env:
+ DOTNET_NOLOGO: true
+
+ strategy:
+ matrix:
+ targetframework: [ "net6.0", "net7.0" ]
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'recursive'
+
+ - name: Download dotnet framework
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 6.0.x
+ 7.0.x
+
+ - name: Download dotnet build-script tools
+ run: dotnet tool restore
+
+ - name: Unit tests
+ run: ./build.sh Test.NetStandard.Unit.WithRetry -f ${{ matrix.targetframework }}
+
+ - name: Integration tests
+ run: ./build.sh Test.NetStandard.Integration.WithRetry -f ${{ matrix.targetframework }}
diff --git a/.github/workflows/run-tests-windows-netframework.yml b/.github/workflows/run-tests-windows-netframework.yml
new file mode 100644
index 000000000..f2ce7acba
--- /dev/null
+++ b/.github/workflows/run-tests-windows-netframework.yml
@@ -0,0 +1,26 @@
+name: "Unit and Integration Test: Windows (NetFramework)"
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ check:
+ runs-on: windows-latest
+ env:
+ DOTNET_NOLOGO: true
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'recursive'
+
+ - name: Download dotnet build-script tools
+ run: dotnet tool restore
+
+ - name: Unit tests
+ run: ./build.cmd Test.NetFramework.Unit.WithRetry
+
+ - name: Integration tests
+ run: ./build.cmd Test.NetFramework.Integration.WithRetry
diff --git a/.github/workflows/run-tests-windows.yml b/.github/workflows/run-tests-windows.yml
new file mode 100644
index 000000000..d40cf1501
--- /dev/null
+++ b/.github/workflows/run-tests-windows.yml
@@ -0,0 +1,37 @@
+name: "Unit and Integration Test: Windows"
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ check:
+ runs-on: windows-latest
+ env:
+ DOTNET_NOLOGO: true
+
+ strategy:
+ matrix:
+ targetframework: [ "net6.0", "net7.0" ]
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'recursive'
+
+ - name: Download framework
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: |
+ 6.0.x
+ 7.0.x
+
+ - name: Download dotnet build-script tools
+ run: dotnet tool restore
+
+ - name: Unit tests
+ run: ./build.cmd Test.NetStandard.Unit.WithRetry -f ${{ matrix.targetframework }}
+
+ - name: Integration tests
+ run: ./build.cmd Test.NetStandard.Integration.WithRetry -f ${{ matrix.targetframework }}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ea3c57238..b7d5073c5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -11,15 +11,8 @@
## Building and Packaging
-The build scripts are written using ```fake``` and need to be run on Windows with Visual Studio 2019 installed. Fake and nuget.exe can be installed via [chocolatey](https://chocolatey.org)
-
-```shell
-choco install fake
-choco install nuget.commandline
-```
-
-Running `.\build.cmd` will start the build process and run the tests. By default it runs the NetFramework tests.
-To run the Netcore build and tests you can run `.\build.cmd Test.NetStandard`
+- The build scripts are written using [fake build project](https://fake.build/guide/getting-started.html#Run-FAKE-using-a-dedicated-build-project).
+- For more information on building, testing and packaging, take a look at [FAKE build scripts](./build-script/README.md).
## Working from source
diff --git a/README.md b/README.md
index 84b3121a2..5f50705ca 100644
--- a/README.md
+++ b/README.md
@@ -12,12 +12,14 @@ This is a .NET client library for Ably. The library currently targets the [Ably
## Supported platforms
-* .NET (Core) 3.1+
-* .NET Framework 4.8
-* .NET Standard 2.0+
+* [.NET Standard 2.0+](https://learn.microsoft.com/en-us/dotnet/standard/net-standard?tabs=net-standard-2-0)
+* .NET 6.x, 7.x (MAUI supported)
+* .NET Framework 4.6+
+* .NET (Core) 2.0+
* Mono 5.4+
* [Xamarin.Android 8.0+](https://developer.xamarin.com/releases/android/xamarin.android_8/xamarin.android_8.0/)
-* [Xamarin.iOS 11.4+](https://developer.xamarin.com/releases/ios/xamarin.ios_11/xamarin.ios_11.4/)
+* [Xamarin.iOS 10.14+](https://developer.xamarin.com/releases/ios/xamarin.ios_10/xamarin.ios_10.14/)
+* Xamarin.Mac 3.8+
## Push notification
@@ -49,7 +51,6 @@ The [Push Notifications Readme](PushNotifications.md) describes:
## Known Limitations
* Browser push notifications in [Blazor](https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor) are not supported.
-* [MAUI framework](https://dotnet.microsoft.com/en-us/apps/maui) is under testing and not yet fully supported, see [MAUI issue](https://github.com/ably/ably-dotnet/issues/1205).
## Documentation
diff --git a/build-script/.paket/Paket.Restore.targets b/build-script/.paket/Paket.Restore.targets
new file mode 100644
index 000000000..4deb15bcd
--- /dev/null
+++ b/build-script/.paket/Paket.Restore.targets
@@ -0,0 +1,557 @@
+
+
+
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+ $(MSBuildVersion)
+ 15.0.0
+ false
+ true
+
+ true
+ $(MSBuildThisFileDirectory)
+ $(MSBuildThisFileDirectory)..\
+ $(PaketRootPath)paket-files\paket.restore.cached
+ $(PaketRootPath)paket.lock
+ classic
+ proj
+ assembly
+ native
+ /Library/Frameworks/Mono.framework/Commands/mono
+ mono
+
+
+ $(PaketRootPath)paket.bootstrapper.exe
+ $(PaketToolsPath)paket.bootstrapper.exe
+ $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\
+
+ "$(PaketBootStrapperExePath)"
+ $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"
+
+
+
+
+ true
+ true
+
+
+ True
+
+
+ False
+
+ $(BaseIntermediateOutputPath.TrimEnd('\').TrimEnd('\/'))
+
+
+
+
+
+
+
+
+ $(PaketRootPath)paket
+ $(PaketToolsPath)paket
+
+
+
+
+
+ $(PaketRootPath)paket.exe
+ $(PaketToolsPath)paket.exe
+
+
+
+
+
+ <_DotnetToolsJson Condition="Exists('$(PaketRootPath)/.config/dotnet-tools.json')">$([System.IO.File]::ReadAllText("$(PaketRootPath)/.config/dotnet-tools.json"))
+ <_ConfigContainsPaket Condition=" '$(_DotnetToolsJson)' != ''">$(_DotnetToolsJson.Contains('"paket"'))
+ <_ConfigContainsPaket Condition=" '$(_ConfigContainsPaket)' == ''">false
+
+
+
+
+
+
+
+
+
+
+ <_PaketCommand>dotnet paket
+
+
+
+
+
+ $(PaketToolsPath)paket
+ $(PaketBootStrapperExeDir)paket
+
+
+ paket
+
+
+
+
+ <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))
+ <_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(_PaketExeExtension)' == '.dll' ">dotnet "$(PaketExePath)"
+ <_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(OS)' != 'Windows_NT' AND '$(_PaketExeExtension)' == '.exe' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
+ <_PaketCommand Condition=" '$(_PaketCommand)' == '' ">"$(PaketExePath)"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(NoWarn);NU1603;NU1604;NU1605;NU1608
+ false
+ true
+
+
+
+
+
+
+
+
+ $([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))
+
+
+
+
+
+
+ $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[0].Replace(`"`, ``).Replace(` `, ``))
+ $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[1].Replace(`"`, ``).Replace(` `, ``))
+
+
+
+
+ %(PaketRestoreCachedKeyValue.Value)
+ %(PaketRestoreCachedKeyValue.Value)
+
+
+
+
+ true
+ false
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(PaketIntermediateOutputPath)\$(MSBuildProjectFile).paket.references.cached
+
+ $(MSBuildProjectFullPath).paket.references
+
+ $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references
+
+ $(MSBuildProjectDirectory)\paket.references
+
+ false
+ true
+ true
+ references-file-or-cache-not-found
+
+
+
+
+ $([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)'))
+ $([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)'))
+ references-file
+ false
+
+
+
+
+ false
+
+
+
+
+ true
+ target-framework '$(TargetFramework)' or '$(TargetFrameworks)' files @(PaketResolvedFilePaths)
+
+
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length)
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[6])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[7])
+
+
+ %(PaketReferencesFileLinesInfo.PackageVersion)
+ All
+ runtime
+ $(ExcludeAssets);contentFiles
+ $(ExcludeAssets);build;buildMultitargeting;buildTransitive
+ true
+ true
+
+
+
+
+ $(PaketIntermediateOutputPath)/$(MSBuildProjectFile).paket.clitools
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0])
+ $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1])
+
+
+ %(PaketCliToolFileLinesInfo.PackageVersion)
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+ <_NuspecFilesNewLocation Include="$(PaketIntermediateOutputPath)\$(Configuration)\*.nuspec"/>
+
+
+
+
+
+ $(MSBuildProjectDirectory)/$(MSBuildProjectFile)
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ $(PaketIntermediateOutputPath)\$(Configuration)
+ $(PaketIntermediateOutputPath)
+
+
+
+ <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion.Split(`+`)[0]).nuspec"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/build-script/README.md b/build-script/README.md
new file mode 100644
index 000000000..6350b6a8d
--- /dev/null
+++ b/build-script/README.md
@@ -0,0 +1,86 @@
+### F# project for building, testing and packaging ably-dotnet SDK
+
+- This is a F# project created as per [Run-FAKE-using-a-dedicated-build-project](https://fake.build/guide/getting-started.html#Run-FAKE-using-a-dedicated-build-project).
+- This contains scripts to build, test and package projects targetting multiple platforms.
+- Clone the project and download fake tools by running following command at root.
+```
+dotnet tool restore
+```
+- Running `.\build.cmd` will start the build process. By default it builds NetStandard project.
+
+### Build Netframework
+- We have a dedicated netframework project targeting .NetFramework 4.6+.
+- Build NetFramework project
+```
+./build.cmd Build.NetFramework
+```
+
+### Build NetStandard
+- Netstandard currently supports explicit targets for netstandard2.0, net6.0 and net7.0.
+- Build NetStandard project
+```
+./build.sh Build.NetStandard
+```
+
+### Build Xamarin
+- We have a xamarin solution targetting android and iOS.
+- Build Xamarin project
+```
+./build.sh Build.Xamarin
+```
+### Test Netframework
+Run unit tests
+```
+./build.cmd Test.NetFramework.Unit
+./build.cmd Test.NetFramework.Unit.WithRetry // Retry failed tests
+```
+Run integration tests
+```
+./build.cmd Test.NetFramework.Integration
+./build.cmd Test.NetFramework.Integration.WithRetry // Retry failed tests
+```
+
+
+### Test NetStandard
+Run unit tests
+```
+./build.sh Test.NetStandard.Unit
+./build.sh Test.NetStandard.Unit.WithRetry // Retry failed tests
+```
+Run integration tests
+```
+./build.sh Test.NetStandard.Integration
+./build.sh Test.NetStandard.Integration.WithRetry // Retry failed tests
+```
+- Additional `-f` flag can be supplied to test for target framework `net6.0` or `net7.0`
+```
+./build.sh Test.NetStandard.Unit -f net6.0 // run tests for .Net6.0 runtime
+./build.sh Test.NetStandard.Unit -f net7.0 // run tests for .Net7.0 runtime
+```
+
+### Create Nuget packages
+- Currently, we have two scripts to generate nuget packages
+1. package.sh =>
+- Responsible for creating core `ably.io` nuget package.
+```
+./package.sh 1.2.3
+```
+- Above command creates `ably.io.1.2.3.nupkg` package at root.
+- During release process, this package is hosted on [nuget-ably.io](https://www.nuget.org/packages/ably.io).
+
+2. package-push.sh =>
+- Responsible for creating push packages for android and iOS.
+- Please take a look at [Push Notif Doc](../PushNotifications.md) for usage.
+```
+./package-push.sh 1.2.3
+```
+- Above command creates `ably.io.push.android.1.2.3.nupkg` and `ably.io.push.ios.1.2.3` package at root.
+- During release process, this package is hosted on [nuget-ably.io.push.android](https://www.nuget.org/packages/ably.io.push.android) and [nuget-ably.io.push.ios](https://www.nuget.org/packages/ably.io.push.ios).
+
+### Development
+- Please refer to [Getting Started](https://fake.build/guide/what-is-fake.html) for detailed documentation.
+- Format `build.fs` by running following command at root.
+
+```
+dotnet fantomas .\build-script\build.fs
+```
diff --git a/build-script/build-script.fsproj b/build-script/build-script.fsproj
new file mode 100644
index 000000000..1eb82ea29
--- /dev/null
+++ b/build-script/build-script.fsproj
@@ -0,0 +1,15 @@
+
+
+
+ Exe
+ net6.0
+ build_script
+ 3390;$(WarnOn)
+ 0020
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build-script/build.fs b/build-script/build.fs
new file mode 100644
index 000000000..793a12339
--- /dev/null
+++ b/build-script/build.fs
@@ -0,0 +1,548 @@
+open Fake.Core.TargetOperators
+open Fake.Core
+open Fake.IO.Globbing.Operators
+open Fake.DotNet
+open Fake.IO
+open Fake
+open System
+open Fake.DotNet.Testing
+open Fake.DotNet.Testing.XUnit2
+open System.Xml.Linq
+open System.Xml.XPath
+open FSharp.Core
+open Fake.Testing.Common
+open System.IO
+open System.Text.RegularExpressions
+
+let currentDir = DirectoryInfo(__SOURCE_DIRECTORY__).Parent.FullName
+
+let netstandardTestDir = "src/IO.Ably.Tests.DotNET"
+let xUnit2 = XUnit2.run
+
+let NetStandardSolution = "src/IO.Ably.NetStandard.sln"
+let NetFrameworkSolution = "src/IO.Ably.NetFramework.sln"
+let XamarinSolution = "src/IO.Ably.Xamarin.sln"
+let buildDir = Path.combine currentDir "build"
+let srcDir = Path.combine currentDir "src"
+let testResultsDir = Path.combine buildDir "tests"
+let packageDir = Path.combine buildDir "package"
+let configuration = DotNet.Release
+let packageSolution = "src/IO.Ably.Package.sln"
+let pushPackageSolution = "src/IO.Ably.PackagePush.sln"
+let buildMode = Environment.environVarOrDefault "buildMode" "Release"
+
+type TestRun =
+ | Method of string
+ | UnitTests
+ | IntegrationTests
+
+let cli =
+ """
+Usage:
+ prog [options]
+
+Options:
+ -t Target
+ -v Version
+ -f Target Framework Moniker (TFM)
+"""
+
+let initTargets (argv) =
+
+
+ // retrieve the fake 5 context information
+ // let ctx = Context.forceFakeContext ()
+ // get the arguments
+ // let args = ctx.Arguments
+ let parser = Docopt(cli)
+ //let parsedArguments = parser.Parse(args |> List.toArray)
+
+ let parsedArguments = parser.Parse(argv)
+
+ let version =
+ match DocoptResult.tryGetArgument "-v" parsedArguments with
+ | None -> ""
+ | Some version -> version
+
+ let framework: string option =
+ match DocoptResult.tryGetArgument "-f" parsedArguments with
+ | None -> None
+ | Some framework -> Some framework
+
+ let mergeJsonNet path outputPath =
+ let target = Path.combine path "IO.Ably.dll"
+ let docsFile = Path.combine path "IO.Ably.xml"
+ let out = Path.combine outputPath "IO.Ably.dll"
+
+ Directory.ensure outputPath
+
+ CreateProcess.fromRawCommand
+ "./tools/ilrepack.exe"
+ [ "/lib:" + path
+ "/targetplatform:v4"
+ "/internalize"
+ "/attr:" + target
+ "/keyfile:IO.Ably.snk"
+ "/parallel"
+ "/out:" + out
+ target
+ Path.combine path "Newtonsoft.Json.dll" ]
+ |> Proc.run // start with the above configuration
+ |> ignore
+
+ // Copy the xml docs
+ if File.exists docsFile then
+ Shell.copy outputPath [ docsFile ]
+
+
+ // *** Define Targets ***
+ Target.create "Clean" (fun _ ->
+ Trace.log (sprintf "Current dir: %s" currentDir)
+ Trace.log " --- Removing build folder ---"
+ Directory.delete (buildDir)
+ Directory.delete (packageDir)
+
+ Directory.ensure testResultsDir
+ Directory.ensure packageDir)
+
+ Target.create "Version" (fun _ ->
+ AssemblyInfoFile.createCSharp
+ "./src/CommonAssemblyInfo.cs"
+ [ AssemblyInfo.Company "Ably"
+ AssemblyInfo.Product "Ably .NET Library"
+ AssemblyInfo.Version version
+ AssemblyInfo.FileVersion version ])
+
+
+ let nugetRestoreUsingLocalTool solutionFile =
+ CreateProcess.fromRawCommand "./tools/nuget.exe" [ "restore"; solutionFile ]
+ |> Proc.run
+
+ let nugetRestoreUsingCLI solutionFile =
+ CreateProcess.fromRawCommand "nuget" [ "restore"; solutionFile ] |> Proc.run
+
+ Target.create "Restore" (fun _ ->
+ if Environment.isWindows then
+ nugetRestoreUsingLocalTool "src/IO.Ably.sln" |> ignore
+
+ CreateProcess.fromRawCommand "dotnet" [ "restore"; "src/IO.Ably.sln" ]
+ |> Proc.run
+ |> ignore)
+
+ Target.create "NetFramework - Build" (fun _ ->
+ let setParams (defaults: MSBuildParams) =
+ { defaults with
+ Verbosity = Some(Quiet)
+ Targets = [ "Build" ]
+ Properties =
+ [ "Optimize", "True"
+ "DebugSymbols", "True"
+ "Configuration", buildMode
+ "dummy", "property" ] } // workaround added as per https://github.com/fsprojects/FAKE/issues/2738
+
+ MSBuild.build setParams NetFrameworkSolution)
+
+
+ Target.create "Restore Xamarin" (fun _ -> nugetRestoreUsingCLI XamarinSolution |> ignore)
+
+ Target.create "Xamarin - Build" (fun _ ->
+ let setParams (defaults: MSBuildParams) =
+ { defaults with
+ Verbosity = Some(Quiet)
+ Targets = [ "Build" ]
+ Properties =
+ [ "Optimize", "True"
+ "DebugSymbols", "True"
+ "Configuration", buildMode
+ "dummy", "property" ] } // workaround added as per https://github.com/fsprojects/FAKE/issues/2738
+
+ MSBuild.build setParams XamarinSolution)
+
+ let findNextTrxTestPath (resultsPath: string) =
+ [ 1..100 ]
+ |> Seq.map (fun i -> resultsPath.Replace(".trx", sprintf "-%d.trx" i))
+ |> Seq.find (File.exists >> not)
+
+ let findNextTestPath (resultsPath: string) =
+ [ 1..100 ]
+ |> Seq.map (fun i -> resultsPath.Replace(".xml", sprintf "-%d.xml" i))
+ |> Seq.find (File.exists >> not)
+
+ let trimTestMethod (testMethod: string) =
+ match testMethod.Contains("(") with
+ | true -> testMethod.Substring(0, testMethod.IndexOf("("))
+ | false -> testMethod
+
+ let findFailedXUnitTests (resultsPath: string) =
+ let doc = XDocument.Load(resultsPath)
+ let nodes = doc.XPathSelectElements("//test-case[@success='False']")
+
+ nodes
+ |> Seq.map (fun node -> (node.Attribute(XName.Get("name"))).Value)
+ |> Seq.map trimTestMethod
+
+ let findFailedDotnetTestTests (resultsPath: string) =
+ let xml = File.readAsString resultsPath
+ let tidyXml = Regex.Replace(xml, @"xmlns=\""[^\""]+\""", "") // Remove the namespace to make xpath queries easier
+ let doc = XDocument.Parse(tidyXml)
+ let nodes = doc.XPathSelectElements("//UnitTestResult[@outcome='Failed']")
+ printfn "Nodes found: %d" (nodes |> Seq.length)
+
+ nodes
+ |> Seq.map (fun node -> (node.Attribute(XName.Get("testName"))).Value)
+ |> Seq.map trimTestMethod
+ |> Seq.toList
+
+ let runStandardTestsWithOptions testToRun (failOnError: bool) =
+ Directory.ensure testResultsDir
+ Trace.log " --- Testing net core version --- "
+
+ let project =
+ Path.combine currentDir "src/IO.Ably.Tests.DotNET/IO.Ably.Tests.DotNET.csproj"
+
+ match testToRun with
+ | Method testMethodName ->
+ let logsPath =
+ findNextTrxTestPath (Path.combine testResultsDir "tests-netstandard.trx")
+
+ DotNet.test
+ (fun opts ->
+ { opts with
+ Configuration = configuration
+ Filter = Some testMethodName
+ Framework = framework
+ Logger = Some("trx;logfilename=" + logsPath) })
+ project
+
+ logsPath
+ | UnitTests ->
+ let logsPath = Path.combine testResultsDir "tests-netstandard-unit.trx"
+ let mutable filters = [ "type!=integration" ]
+
+ if Environment.isLinux then
+ filters <- filters @ [ "linux!=skip" ]
+
+ try
+ DotNet.test
+ (fun opts ->
+ { opts with
+ Configuration = configuration
+ Filter = Some(filters |> String.concat "&")
+ Framework = framework
+ Logger = Some("trx;logfilename=" + logsPath) })
+ project
+ with :? Fake.DotNet.MSBuildException ->
+ printfn "Not all unit tests passed. FailOnError is %b" failOnError |> ignore
+
+ if failOnError then
+ reraise ()
+
+ logsPath
+ | IntegrationTests ->
+ let logsPath = Path.combine testResultsDir "tests-netstandard-integration.trx"
+
+ try
+ DotNet.test
+ (fun opts ->
+ { opts with
+ Configuration = configuration
+ Filter = Some("type=integration")
+ Logger = Some("trx;logfilename=" + logsPath) })
+ project
+ with :? Fake.DotNet.MSBuildException ->
+ printfn "Not all integration tests passed the first time"
+
+ if failOnError then
+ reraise ()
+
+
+ logsPath
+
+ let runStandardTests testToRun =
+ runStandardTestsWithOptions testToRun true
+
+ let runStandardTestsAllowRetry testToRun =
+ runStandardTestsWithOptions testToRun false
+
+ let runFrameworkTests testToRun errorLevel =
+ Directory.ensure testResultsDir
+ let testDir = Path.combine currentDir "src/IO.Ably.Tests.NETFramework/bin/Release"
+ let testDll = !!(Path.combine testDir "*.Tests.*.dll")
+
+ match testToRun with
+ | Method testMethodName ->
+ let logsPath =
+ findNextTestPath (Path.combine testResultsDir "xunit-netframework.xml")
+
+ testDll
+ |> xUnit2 (fun p ->
+ { p with
+ NUnitXmlOutputPath = Some(logsPath)
+ Method = Some(trimTestMethod testMethodName)
+ ErrorLevel = errorLevel })
+
+ logsPath
+ | UnitTests ->
+ let logsPath = Path.combine testResultsDir "xunit-netframework-unit.xml"
+
+ testDll
+ |> xUnit2 (fun p ->
+ { p with
+ NUnitXmlOutputPath = Some logsPath
+ ExcludeTraits = [ ("type", "integration") ]
+ ErrorLevel = errorLevel })
+
+ logsPath
+ | IntegrationTests ->
+ let logsPath = Path.combine testResultsDir "xunit-netframework-integration.xml"
+
+ testDll
+ |> xUnit2 (fun p ->
+ { p with
+ NUnitXmlOutputPath = Some logsPath
+ IncludeTraits = [ ("type", "integration") ]
+ TimeOut = TimeSpan.FromMinutes(20.)
+ Parallel = ParallelMode.Collections
+ ErrorLevel = errorLevel })
+
+ logsPath
+
+ Target.create "NetFramework.Integration.Rerun" (fun _ ->
+
+ let setParams (defaults: MSBuildParams) =
+ { defaults with
+ Verbosity = Some(Quiet)
+ Targets = [ "Build" ]
+ Properties =
+ [ "Optimize", "True"
+ "DebugSymbols", "True"
+ "Configuration", buildMode
+ "dummy", "property" ] } // workaround added as per https://github.com/fsprojects/FAKE/issues/2738
+
+ MSBuild.build setParams NetFrameworkSolution
+
+
+ let logsPath = Path.combine testResultsDir "xunit-netframework-integration.xml"
+
+ let failedTestNames = findFailedXUnitTests logsPath
+
+ for test in failedTestNames do
+ runFrameworkTests (Method test) TestRunnerErrorLevel.Error |> ignore)
+
+ Target.create "NetFramework - Unit Tests" (fun _ ->
+
+ runFrameworkTests UnitTests TestRunnerErrorLevel.Error |> ignore)
+
+ Target.create "NetFramework - Unit Tests with retry" (fun _ ->
+
+ let logs = runFrameworkTests UnitTests TestRunnerErrorLevel.DontFailBuild
+
+ let failedTestNames = findFailedXUnitTests logs
+
+ for test in failedTestNames do
+ runFrameworkTests (Method test) TestRunnerErrorLevel.Error |> ignore)
+
+ Target.create "NetFramework - Integration Tests" (fun _ ->
+
+ runFrameworkTests IntegrationTests TestRunnerErrorLevel.Error |> ignore)
+
+ Target.create "NetFramework - Integration Tests with retry" (fun _ ->
+
+ let logs = runFrameworkTests IntegrationTests TestRunnerErrorLevel.DontFailBuild
+
+ let failedTestNames = findFailedXUnitTests logs
+
+ for test in failedTestNames do
+ runFrameworkTests (Method test) TestRunnerErrorLevel.Error |> ignore)
+
+ Target.create "NetStandard - Build" (fun _ ->
+ DotNet.build (fun opts -> { opts with Configuration = configuration }) NetStandardSolution)
+
+ Target.create "NetStandard - Unit Tests" (fun _ -> runStandardTests UnitTests |> ignore)
+
+ Target.create "NetStandard - Unit Tests with retry" (fun _ ->
+ let logs = runStandardTestsAllowRetry UnitTests
+
+ let failedTestNames = findFailedDotnetTestTests logs
+
+ for test in failedTestNames do
+ runStandardTests (Method test) |> ignore)
+
+ Target.create "NetStandard - Integration Tests" (fun _ -> runStandardTests IntegrationTests |> ignore)
+
+ Target.create "NetStandard - Integration Tests with retry" (fun _ ->
+
+ let logs = runStandardTestsAllowRetry IntegrationTests
+
+ let failedTestNames = findFailedDotnetTestTests logs
+
+ for test in failedTestNames do
+ runStandardTests (Method test) |> ignore)
+
+ Target.create "Package - Build All" (fun _ ->
+ let setParams (defaults: MSBuildParams) =
+ { defaults with
+ Verbosity = Some(Quiet)
+ Targets = [ "Build" ]
+ Properties =
+ [ "Optimize", "True"
+ "DebugSymbols", "True"
+ "Configuration", buildMode
+ "StyleCopEnabled", "True"
+ "Package", "True"
+ "DefineConstants", "PACKAGE"
+ "dummy", "property" ] } // workaround added as per https://github.com/fsprojects/FAKE/issues/2738
+
+ MSBuild.build setParams packageSolution)
+
+ Target.create "Push Package - Build All" (fun _ ->
+ let setParams (defaults: MSBuildParams) =
+ { defaults with
+ Verbosity = Some(Quiet)
+ Targets = [ "Build" ]
+ Properties =
+ [ "Optimize", "True"
+ "DebugSymbols", "True"
+ "Configuration", "Package"
+ "StyleCopEnabled", "True"
+ "Package", "True"
+ "DefineConstants", "PACKAGE"
+ "dummy", "property" ] } // workaround added as per https://github.com/fsprojects/FAKE/issues/2738
+
+ MSBuild.build setParams pushPackageSolution)
+
+ Target.create "Package - Merge json.net" (fun _ ->
+ let projectsToMerge = [ "IO.Ably.Android"; "IO.Ably.iOS"; "IO.Ably.NETFramework" ]
+
+ let binFolderPaths =
+ projectsToMerge
+ |> Seq.map (Path.combine "src")
+ |> Seq.map (fun path -> sprintf "%s/bin/%s" path buildMode)
+
+ // Copy all IO.Ably* files to the `packaged folder`
+ binFolderPaths
+ |> Seq.iter (fun path -> !!(Path.combine path "IO.Ably*") |> Shell.copy (Path.combine path "packaged"))
+
+ // Merge newtonsoft json into ably.dll and overwrite IO.Ably.dll in the packaged folder with the merged one
+ binFolderPaths
+ |> Seq.iter (fun path -> mergeJsonNet path (Path.combine path "packaged"))
+
+ )
+
+ Target.create "Package - Create nuget" (fun _ ->
+ CreateProcess.fromRawCommand
+ "./tools/nuget.exe"
+ [ "pack"
+ "./nuget/io.ably.nuspec"
+ "-properties"
+ sprintf "version=%s;configuration=Release" version ]
+ |> Proc.run // start with the above configuration
+ |> ignore)
+
+ Target.create "Package - Push" (fun _ ->
+ CreateProcess.fromRawCommand
+ "nuget"
+ [ "pack"
+ "./nuget/io.ably.push.android.nuspec"
+ "-properties"
+ sprintf "version=%s;configuration=Release" version ]
+ |> Proc.run // start with the above configuration
+ |> ignore
+
+ CreateProcess.fromRawCommand
+ "nuget"
+ [ "pack"
+ "./nuget/io.ably.push.ios.nuspec"
+ "-properties"
+ sprintf "version=%s;configuration=Release" version ]
+ |> Proc.run // start with the above configuration
+ |> ignore)
+
+ Target.create "Prepare" ignore
+ Target.create "Build.NetFramework" ignore
+ Target.create "Build.NetStandard" ignore
+ Target.create "Build.Xamarin" ignore
+
+ Target.create "Test.NetFramework.Unit" ignore
+ Target.create "Test.NetFramework.Unit.WithRetry" ignore
+ Target.create "Test.NetFramework.Integration" ignore
+ Target.create "Test.NetFramework.Integration.WithRetry" ignore
+
+ Target.create "Test.NetStandard.Unit" ignore
+ Target.create "Test.NetStandard.Unit.WithRetry" ignore
+ Target.create "Test.NetStandard.Integration" ignore
+ Target.create "Test.NetStandard.Integration.WithRetry" ignore
+
+ Target.create "Package" ignore
+ Target.create "PushPackage" ignore
+
+
+
+ "Clean" ==> "Restore" ==> "Prepare"
+
+ "Prepare" ==> "NetFramework - Build" ==> "Build.NetFramework"
+
+ "Prepare" ==> "Restore Xamarin" ==> "Xamarin - Build" ==> "Build.Xamarin"
+
+ "Prepare" ==> "NetStandard - Build" ==> "Build.NetStandard"
+
+ "Prepare"
+ ==> "Version"
+ ==> "Package - Build All"
+ ==> "Package - Merge json.net"
+ ==> "Package - Create nuget"
+ ==> "Package"
+
+ "Prepare"
+ ==> "Version"
+ ==> "Push Package - Build All"
+ ==> "Package - Push"
+ ==> "PushPackage"
+
+ "Build.NetFramework"
+ ==> "NetFramework - Unit Tests"
+ ==> "Test.NetFramework.Unit"
+
+ "Build.NetFramework"
+ ==> "NetFramework - Unit Tests with retry"
+ ==> "Test.NetFramework.Unit.WithRetry"
+
+ "Build.NetFramework"
+ ==> "NetFramework - Integration Tests"
+ ==> "Test.NetFramework.Integration"
+
+ "Build.NetFramework"
+ ==> "NetFramework - Integration Tests with retry"
+ ==> "Test.NetFramework.Integration.WithRetry"
+
+
+ "Build.NetStandard" ==> "NetStandard - Unit Tests" ==> "Test.NetStandard.Unit"
+
+ "Build.NetStandard"
+ ==> "NetStandard - Unit Tests with retry"
+ ==> "Test.NetStandard.Unit.WithRetry"
+
+ "Build.NetStandard"
+ ==> "NetStandard - Integration Tests"
+ ==> "Test.NetStandard.Integration"
+
+ "Build.NetStandard"
+ ==> "NetStandard - Integration Tests with retry"
+ ==> "Test.NetStandard.Integration.WithRetry"
+
+//-----------------------------------------------------------------------------
+// Target Start
+//-----------------------------------------------------------------------------
+
+[]
+let main argv =
+ argv
+ |> Array.toList
+ |> Context.FakeExecutionContext.Create false "build.fsx"
+ |> Context.RuntimeContext.Fake
+ |> Context.setExecutionContext
+
+ initTargets (argv)
+ Target.runOrDefaultWithArguments "Build.NetStandard"
+
+ 0 // return an integer exit code
diff --git a/build-script/paket.dependencies b/build-script/paket.dependencies
new file mode 100644
index 000000000..d5e4f68cd
--- /dev/null
+++ b/build-script/paket.dependencies
@@ -0,0 +1,10 @@
+source https://api.nuget.org/v3/index.json
+
+storage: none
+framework: netstandard2.0, net462, net6.0, net7.0
+nuget Fake.Core.Target
+nuget Fake.DotNet.AssemblyInfoFile
+nuget Fake.DotNet.Cli
+nuget Fake.DotNet.Testing.XUnit2
+nuget Microsoft.Build 17.3.2
+nuget Microsoft.Build.Tasks.Core 17.3.2
diff --git a/build-script/paket.lock b/build-script/paket.lock
new file mode 100644
index 000000000..6d00ab95d
--- /dev/null
+++ b/build-script/paket.lock
@@ -0,0 +1,236 @@
+STORAGE: NONE
+RESTRICTION: || (== net462) (== net6.0) (== net7.0) (== netstandard2.0)
+NUGET
+ remote: https://api.nuget.org/v3/index.json
+ BlackFox.VsWhere (1.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 4.2.3) - restriction: || (&& (== net462) (< net45) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Win32.Registry (>= 4.7) - restriction: || (&& (== net462) (< net45) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.CommandLineParsing (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FParsec (>= 1.1.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Context (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Environment (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.FakeVar (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Context (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Process (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.FakeVar (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Collections.Immutable (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.SemVer (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Target (6.0)
+ Fake.Core.CommandLineParsing (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Context (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.FakeVar (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Process (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Control.Reactive (>= 5.0.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Tasks (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.FakeVar (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Xml (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.AssemblyInfoFile (6.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.Cli (6.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Process (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.MSBuild (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.NuGet (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Mono.Posix.NETStandard (>= 1.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Newtonsoft.Json (>= 13.0.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.MSBuild (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ BlackFox.VsWhere (>= 1.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Process (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ MSBuild.StructuredLogger (>= 2.1.545) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.NuGet (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Environment (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Process (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.SemVer (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Tasks (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Xml (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Net.Http (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Newtonsoft.Json (>= 13.0.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Protocol (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.DotNet.Testing.XUnit2 (6.0)
+ Fake.Core.Process (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Testing.Common (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.IO.FileSystem (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.String (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Net.Http (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Testing.Common (6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Fake.Core.Trace (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 6.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FParsec (1.1.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 4.3.4)
+ FSharp.Control.Reactive (5.0.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (>= 4.7.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Reactive (>= 5.0 < 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ FSharp.Core (7.0.200) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build (17.3.2)
+ Microsoft.Build.Framework (>= 17.3.2) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ Microsoft.NET.StringTools (>= 17.3.2) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Collections.Immutable (>= 6.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Configuration.ConfigurationManager (>= 6.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Reflection.Metadata (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ System.Reflection.MetadataLoadContext (>= 6.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Security.Principal.Windows (>= 5.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ System.Text.Encoding.CodePages (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ System.Text.Json (>= 6.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Threading.Tasks.Dataflow (>= 6.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ Microsoft.Build.Framework (17.3.2) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Permissions (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build.Tasks.Core (17.3.2)
+ Microsoft.Build.Framework (>= 17.3.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build.Utilities.Core (>= 17.3.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.NET.StringTools (>= 17.3.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Win32.Registry (>= 5.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.CodeDom (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Collections.Immutable (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Reflection.Metadata (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Resources.Extensions (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.Pkcs (>= 6.0.1) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.Xml (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Permissions (>= 6.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Threading.Tasks.Dataflow (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build.Utilities.Core (17.3.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build.Framework (>= 17.3.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.NET.StringTools (>= 17.3.2) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Win32.Registry (>= 5.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Collections.Immutable (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Configuration.ConfigurationManager (>= 6.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Permissions (>= 6.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Text.Encoding.CodePages (>= 6.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ Microsoft.NET.StringTools (17.5) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Memory (>= 4.5.5) - restriction: || (&& (== net462) (== net7.0)) (&& (== net462) (>= net472)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (&& (== net7.0) (>= net472)) (== netstandard2.0)
+ System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (&& (== net462) (== net7.0)) (&& (== net462) (>= net472)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (&& (== net7.0) (>= net472)) (== netstandard2.0)
+ Microsoft.NETCore.Platforms (7.0.1) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (< net45) (>= netstandard2.0)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard1.2)) (&& (== net6.0) (< netstandard1.3)) (&& (== net6.0) (< netstandard1.5)) (&& (== net7.0) (< netcoreapp3.1)) (&& (== net7.0) (< netstandard1.2)) (&& (== net7.0) (< netstandard1.3)) (&& (== net7.0) (< netstandard1.5)) (== netstandard2.0)
+ Microsoft.NETCore.Targets (5.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (< net45) (>= netstandard2.0)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard1.2)) (&& (== net6.0) (< netstandard1.3)) (&& (== net6.0) (< netstandard1.5)) (&& (== net7.0) (< netcoreapp3.1)) (&& (== net7.0) (< netstandard1.2)) (&& (== net7.0) (< netstandard1.3)) (&& (== net7.0) (< netstandard1.5)) (== netstandard2.0)
+ Microsoft.Win32.Registry (5.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Buffers (>= 4.5.1) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= monoandroid) (< netstandard1.3)) (&& (== net462) (>= monotouch)) (&& (== net462) (< net46) (>= netstandard2.0)) (&& (== net462) (>= xamarinios)) (&& (== net462) (>= xamarinmac)) (&& (== net462) (>= xamarintvos)) (&& (== net462) (>= xamarinwatchos)) (&& (== net6.0) (>= monoandroid) (< netstandard1.3)) (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (>= xamarinios)) (&& (== net6.0) (>= xamarinmac)) (&& (== net6.0) (>= xamarintvos)) (&& (== net6.0) (>= xamarinwatchos)) (&& (== net7.0) (>= monoandroid) (< netstandard1.3)) (&& (== net7.0) (>= monotouch)) (&& (== net7.0) (< netcoreapp2.0)) (&& (== net7.0) (>= xamarinios)) (&& (== net7.0) (>= xamarinmac)) (&& (== net7.0) (>= xamarintvos)) (&& (== net7.0) (>= xamarinwatchos)) (== netstandard2.0)
+ System.Memory (>= 4.5.4) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (< net46) (>= netstandard2.0)) (&& (== net462) (>= netcoreapp2.0)) (&& (== net462) (>= uap10.1)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (< netcoreapp2.1)) (&& (== net6.0) (>= uap10.1)) (&& (== net7.0) (< netcoreapp2.0)) (&& (== net7.0) (< netcoreapp2.1)) (&& (== net7.0) (>= uap10.1)) (== netstandard2.0)
+ System.Security.AccessControl (>= 5.0)
+ System.Security.Principal.Windows (>= 5.0)
+ Microsoft.Win32.SystemEvents (7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ Mono.Posix.NETStandard (1.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ MSBuild.StructuredLogger (2.1.790) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build.Framework (>= 16.10) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.Build.Utilities.Core (>= 16.10) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Newtonsoft.Json (13.0.3) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Common (6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Frameworks (>= 6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Configuration (6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Common (>= 6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.ProtectedData (>= 4.4) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Frameworks (6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Packaging (6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Newtonsoft.Json (>= 13.0.1) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Configuration (>= 6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Versioning (>= 6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.Cng (>= 5.0) - restriction: || (&& (== net462) (>= net5.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.Pkcs (>= 5.0) - restriction: || (&& (== net462) (>= net5.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Protocol (6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Packaging (>= 6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ NuGet.Versioning (6.5) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Buffers (4.5.1) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= net6.0)) (&& (== net6.0) (< netstandard2.1)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0)
+ System.CodeDom (7.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Collections.Immutable (7.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (== net6.0) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Configuration.ConfigurationManager (7.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Diagnostics.EventLog (>= 7.0) - restriction: || (&& (== net462) (>= net7.0)) (&& (== net6.0) (>= net7.0)) (== net7.0) (&& (== netstandard2.0) (>= net7.0))
+ System.Security.Cryptography.ProtectedData (>= 7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Permissions (>= 7.0)
+ System.Diagnostics.EventLog (7.0) - restriction: || (&& (== net462) (>= net7.0)) (&& (== net6.0) (>= net7.0)) (== net7.0) (&& (== netstandard2.0) (>= net7.0))
+ System.Drawing.Common (7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ Microsoft.Win32.SystemEvents (>= 7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ System.Formats.Asn1 (7.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.1)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Buffers (>= 4.5.1) - restriction: || (== net462) (&& (== net6.0) (>= net462)) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Memory (>= 4.5.5) - restriction: || (== net462) (&& (== net6.0) (>= net462)) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Memory (4.5.5) - restriction: || (&& (== net462) (== net7.0)) (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (&& (== net7.0) (>= net472)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0)
+ System.Reactive (5.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Runtime.InteropServices.WindowsRuntime (>= 4.3) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net7.0) (< netcoreapp3.1)) (== netstandard2.0)
+ System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= net472)) (&& (== net462) (>= netstandard2.0)) (&& (== net462) (>= uap10.1)) (&& (== net6.0) (>= net472)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (>= uap10.1)) (&& (== net7.0) (>= net472)) (&& (== net7.0) (< netcoreapp3.1)) (&& (== net7.0) (>= uap10.1)) (== netstandard2.0)
+ System.Reflection.Metadata (7.0.1) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Collections.Immutable (>= 7.0)
+ System.Reflection.MetadataLoadContext (7.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Collections.Immutable (>= 7.0)
+ System.Reflection.Metadata (>= 7.0)
+ System.Resources.Extensions (7.0) - restriction: || (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Memory (>= 4.5.5) - restriction: || (== net462) (&& (== net6.0) (>= net462)) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Runtime (4.3.1) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (< net45) (>= netstandard2.0)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net7.0) (< netcoreapp3.1)) (== netstandard2.0)
+ Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (== net462) (< net45)) (== net6.0) (== net7.0) (== netstandard2.0)
+ Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (== net462) (< net45)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Runtime.CompilerServices.Unsafe (6.0) - restriction: || (&& (== net462) (== net7.0)) (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (&& (== net7.0) (>= net461)) (&& (== net7.0) (>= net472)) (&& (== net7.0) (< netcoreapp2.1)) (&& (== net7.0) (< netstandard1.0)) (&& (== net7.0) (< netstandard2.0)) (&& (== net7.0) (>= uap10.1)) (&& (== net7.0) (>= wp8)) (== netstandard2.0)
+ System.Runtime.InteropServices.WindowsRuntime (4.3) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net7.0) (< netcoreapp3.1)) (== netstandard2.0)
+ System.Runtime (>= 4.3) - restriction: || (&& (== net462) (< net45)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.AccessControl (6.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= net6.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Security.Principal.Windows (>= 5.0) - restriction: || (== net462) (&& (== net6.0) (>= net461)) (&& (== net7.0) (>= net461)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Security.Cryptography.Cng (5.0) - restriction: || (&& (== net462) (>= net5.0)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (&& (== net462) (>= netstandard2.1)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.Pkcs (7.0.1) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Buffers (>= 4.5.1) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net6.0) (< netstandard2.1)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0)
+ System.Formats.Asn1 (>= 7.0) - restriction: || (&& (== net462) (>= netstandard2.1)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Memory (>= 4.5.5) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net6.0) (< netstandard2.1)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0)
+ System.Security.Cryptography.Cng (>= 5.0) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= netstandard2.1)) (&& (== net6.0) (< netstandard2.1)) (&& (== net7.0) (< net6.0)) (&& (== net7.0) (< netstandard2.1)) (== netstandard2.0)
+ System.Security.Cryptography.ProtectedData (7.0.1) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Cryptography.Xml (7.0.1) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Memory (>= 4.5.5) - restriction: || (&& (== net462) (== net7.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Security.AccessControl (>= 6.0) - restriction: || (&& (== net462) (== net7.0)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Security.Cryptography.Pkcs (>= 7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.Permissions (7.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Security.AccessControl (>= 6.0) - restriction: || (== net462) (&& (== net6.0) (>= net462)) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Windows.Extensions (>= 7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ System.Security.Principal.Windows (5.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netcoreapp2.0)) (&& (== net462) (>= netcoreapp2.1)) (&& (== net462) (>= netstandard2.0)) (&& (== net462) (>= xamarinios)) (&& (== net462) (>= xamarinmac)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Text.Encoding.CodePages (7.0) - restriction: || (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (== net6.0) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Text.Encodings.Web (7.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (== net6.0) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Text.Json (7.0.2) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net472)) (&& (== netstandard2.0) (>= net6.0))
+ System.Runtime.CompilerServices.Unsafe (>= 6.0) - restriction: || (== net462) (== net6.0) (&& (== net7.0) (>= net462)) (&& (== net7.0) (< net6.0)) (== netstandard2.0)
+ System.Text.Encodings.Web (>= 7.0)
+ System.Threading.Tasks.Dataflow (7.0) - restriction: || (&& (== net462) (>= net472)) (&& (== net462) (>= net6.0)) (&& (== net462) (>= netstandard2.0)) (== net6.0) (== net7.0) (== netstandard2.0)
+ System.Threading.Tasks.Extensions (4.5.4) - restriction: || (&& (== net462) (== net6.0)) (&& (== net462) (== net7.0)) (&& (== net462) (>= net472)) (&& (== net462) (>= netstandard2.0)) (&& (== net6.0) (>= net472)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (>= uap10.1)) (&& (== net7.0) (>= net472)) (&& (== net7.0) (< netcoreapp3.1)) (&& (== net7.0) (>= uap10.1)) (== netstandard2.0)
+ System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (== net462) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.1)) (&& (== net6.0) (< netstandard1.0)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= wp8)) (&& (== net7.0) (>= net461)) (&& (== net7.0) (< netcoreapp2.1)) (&& (== net7.0) (< netstandard1.0)) (&& (== net7.0) (< netstandard2.0)) (&& (== net7.0) (>= wp8)) (== netstandard2.0)
+ System.Windows.Extensions (7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
+ System.Drawing.Common (>= 7.0) - restriction: || (&& (== net462) (>= net6.0)) (== net6.0) (== net7.0) (&& (== netstandard2.0) (>= net6.0))
diff --git a/build-script/paket.references b/build-script/paket.references
new file mode 100644
index 000000000..539702f5e
--- /dev/null
+++ b/build-script/paket.references
@@ -0,0 +1,6 @@
+Microsoft.Build
+Microsoft.Build.Tasks.Core
+Fake.Core.Target
+Fake.DotNet.AssemblyInfoFile
+Fake.DotNet.Cli
+Fake.DotNet.Testing.XUnit2
\ No newline at end of file
diff --git a/build.cmd b/build.cmd
index 4ef039cb0..63f20c506 100644
--- a/build.cmd
+++ b/build.cmd
@@ -1,4 +1,4 @@
@echo off
cls
dotnet tool restore
-if "%~1"=="" (dotnet fake run build.fsx) else (dotnet fake run build.fsx -t %*)
+if "%~1"=="" (dotnet run --project ./build-script/build-script.fsproj) else (dotnet run --project ./build-script/build-script.fsproj -- -t %*)
diff --git a/build.fsx b/build.fsx
deleted file mode 100644
index 906b045c4..000000000
--- a/build.fsx
+++ /dev/null
@@ -1,538 +0,0 @@
-#r "paket:
-nuget Fake.Core.Target
-nuget Fake.Core.CommandLineParsing
-nuget Fake.DotNet.AssemblyInfoFile
-nuget Fake.IO.FileSystem
-nuget Fake.DotNet.Cli
-nuget Fake.DotNet.MSBuild
-nuget Fake.DotNet.Testing.XUnit2
-nuget Fake.DotNet.NuGet
-//"
-
-#r "System.Core.dll"
-#r "System.Xml.Linq.dll"
-// include Fake modules, see Fake modules section
-
-open Fake.Core.TargetOperators
-open Fake.Core.Operators
-open Fake.Core
-open Fake.IO.Globbing.Operators
-open Fake.DotNet
-open Fake.IO
-open Fake
-open System
-open Fake.DotNet.Testing
-open Fake.DotNet.Testing.XUnit2
-open System.Xml.Linq
-open System.Xml.XPath
-open FSharp.Core
-open Fake.Testing.Common
-open Fake.DotNet.NuGet
-open System.Text.RegularExpressions
-
-let currentDir = __SOURCE_DIRECTORY__
-let netstandardTestDir = "src/IO.Ably.Tests.DotNetCore20"
-let xUnit2 = XUnit2.run
-
-let NetStandardSolution = "src/IO.Ably.NetStandard.sln"
-let NetFrameworkSolution = "src/IO.Ably.NetFramework.sln"
-let XamarinSolution = "src/IO.Ably.Xamarin.sln"
-let buildDir = Path.combine currentDir "build"
-let srcDir = Path.combine currentDir "src"
-let testResultsDir = Path.combine buildDir "tests"
-let packageDir = Path.combine buildDir "package"
-let configuration = DotNet.Release
-let packageSolution = "src/IO.Ably.Package.sln"
-let pushPackageSolution = "src/IO.Ably.PackagePush.sln"
-let buildMode = Environment.environVarOrDefault "buildMode" "Release"
-
-let cli = """
-usage: prog [options]
-
-options:
- -t Target
- -v Version
-"""
-
-// retrieve the fake 5 context information
-let ctx = Context.forceFakeContext ()
-// get the arguments
-let args = ctx.Arguments
-let parser = Docopt(cli)
-let parsedArguments = parser.Parse(args |> List.toArray)
-
-let version = match DocoptResult.tryGetArgument "-v" parsedArguments with
- | None -> ""
- | Some version -> version
-
-let mergeJsonNet path outputPath =
- let target = Path.combine path "IO.Ably.dll"
- let docsFile = Path.combine path "IO.Ably.xml"
- let out = Path.combine outputPath "IO.Ably.dll"
-
- Directory.ensure outputPath
-
- CreateProcess.fromRawCommand "./tools/ilrepack.exe"
- [
- "/lib:" + path
- "/targetplatform:v4"
- "/internalize"
- "/attr:" + target
- "/keyfile:IO.Ably.snk"
- "/parallel"
- "/out:" + out
- target
- Path.combine path "Newtonsoft.Json.dll"
- ]
- |> Proc.run // start with the above configuration
- |> ignore
-
- // Copy the xml docs
- if File.exists docsFile then Shell.copy outputPath [ docsFile ]
-
-
-// *** Define Targets ***
-Target.create "Clean" (fun _ ->
- Trace.log (sprintf "Current dir: %s" currentDir)
- Trace.log " --- Removing build folder ---"
- Directory.delete(buildDir)
- Directory.delete(packageDir)
-
- Directory.ensure testResultsDir
- Directory.ensure packageDir
-)
-
-Target.create "Version" (fun _ ->
- AssemblyInfoFile.createCSharp "./src/CommonAssemblyInfo.cs"
- [
- AssemblyInfo.Company "Ably"
- AssemblyInfo.Product "Ably .NET Library"
- AssemblyInfo.Version version
- AssemblyInfo.FileVersion version
- ]
-)
-
-
-let nugetRestore solutionFile =
- CreateProcess.fromRawCommand "./tools/nuget.exe" ["restore"; solutionFile]
- |> Proc.run // start with the above configuration
-
-Target.create "Restore" (fun _ ->
- if Environment.isWindows then
- nugetRestore "src/IO.Ably.sln" |> ignore
-
- CreateProcess.fromRawCommand "dotnet" ["restore"; "src/IO.Ably.sln"]
- |> Proc.run |> ignore
-)
-
-Target.create "Restore Xamarin" (fun _ ->
-
- if not Environment.isWindows then
- CreateProcess.fromRawCommand "ls" ["../packages"] |> Proc.run |> ignore
-
- let setParams (defaults:MSBuildParams) =
- { defaults with
- Verbosity = Some(Quiet)
- Targets = ["Restore"]
- Properties =
- [
- "Configuration", buildMode
- "RestorePackages", "True"
- ]
- }
- MSBuild.build setParams NetFrameworkSolution
-
-
-)
-
-Target.create "NetFramework - Build" (fun _ ->
- let setParams (defaults:MSBuildParams) =
- { defaults with
- Verbosity = Some(Quiet)
- Targets = ["Build"]
- Properties =
- [
- "Optimize", "True"
- "DebugSymbols", "True"
- "Configuration", buildMode
- ]
- }
- MSBuild.build setParams NetFrameworkSolution
-)
-
-Target.create "Xamarin - Build" (fun _ ->
- let setParams (defaults:MSBuildParams) =
- { defaults with
- Verbosity = Some(Quiet)
- Targets = ["Build"]
- Properties =
- [
- "Optimize", "True"
- "DebugSymbols", "True"
- "Configuration", buildMode
- ]
- }
- MSBuild.build setParams XamarinSolution
-)
-
-type TestRun =
- | Method of string
- | UnitTests
- | IntegrationTests
-
-let findNextTrxTestPath (resultsPath:string) =
- [ 1 .. 100 ]
- |> Seq.map ( fun i -> resultsPath.Replace(".trx", sprintf "-%d.trx" i))
- |> Seq.find (File.exists >> not)
-
-let findNextTestPath (resultsPath:string) =
- [ 1 .. 100 ]
- |> Seq.map ( fun i -> resultsPath.Replace(".xml", sprintf "-%d.xml" i))
- |> Seq.find (File.exists >> not)
-
-let trimTestMethod (testMethod:string) =
- match testMethod.Contains("(") with
- | true -> testMethod.Substring(0, testMethod.IndexOf("("))
- | false -> testMethod
-
-let findFailedXUnitTests (resultsPath:string) =
- let doc = XDocument.Load(resultsPath)
- let nodes = doc.XPathSelectElements("//test-case[@success='False']")
-
- nodes
- |> Seq.map (fun node -> (node.Attribute(XName.Get("name"))).Value)
- |> Seq.map trimTestMethod
-
-let findFailedDotnetTestTests (resultsPath:string) =
- let xml = File.readAsString resultsPath
- let tidyXml = Regex.Replace(xml, @"xmlns=\""[^\""]+\""", "") // Remove the namespace to make xpath queries easier
- let doc = XDocument.Parse(tidyXml);
- let nodes = doc.XPathSelectElements("//UnitTestResult[@outcome='Failed']")
- printfn "Nodes found: %d" (nodes |> Seq.length)
-
- nodes
- |> Seq.map (fun node -> (node.Attribute(XName.Get("testName"))).Value)
- |> Seq.map trimTestMethod
- |> Seq.toList
-
-let runStandardTestsWithOptions testToRun (failOnError:bool) =
- Directory.ensure testResultsDir
- Trace.log " --- Testing net core version --- "
- let project = Path.combine currentDir "src/IO.Ably.Tests.DotNetCore20/IO.Ably.Tests.DotNetCore20.csproj"
-
- match testToRun with
- | Method testMethodName ->
- let logsPath = findNextTrxTestPath(Path.combine testResultsDir "tests-netstandard.trx")
- DotNet.test (fun opts -> { opts with Configuration = configuration
- Filter = Some testMethodName
- Logger = Some( "trx;logfilename=" + logsPath)
- })
- project
- logsPath
- | UnitTests ->
- let logsPath = Path.combine testResultsDir "tests-netstandard-unit.trx"
- let mutable filters = [ "type!=integration" ]
- if Environment.isLinux then filters <- filters @ ["linux!=skip"]
-
- try
- DotNet.test (fun opts -> { opts with Configuration = configuration
- Filter = Some (filters |> String.concat "&")
- Logger = Some( "trx;logfilename=" + logsPath)
- })
- project
- with
- | :? Fake.DotNet.MSBuildException ->
- printfn "Not all unit tests passed. FailOnError is %b" failOnError |> ignore
- if failOnError then reraise()
-
- logsPath
- | IntegrationTests ->
- let logsPath = Path.combine testResultsDir "tests-netstandard-integration.trx"
- try
- DotNet.test (fun opts -> { opts with Configuration = configuration
- Filter = Some ("type=integration")
- Logger = Some( "trx;logfilename=" + logsPath)
- })
- project
- with
- | :? Fake.DotNet.MSBuildException ->
- printfn "Not all integration tests passed the first time"
- if failOnError then reraise()
-
-
- logsPath
-
-let runStandardTests testToRun =
- runStandardTestsWithOptions testToRun true
-
-let runStandardTestsAllowRetry testToRun =
- runStandardTestsWithOptions testToRun false
-
-let runFrameworkTests testToRun errorLevel =
- Directory.ensure testResultsDir
- let testDir = Path.combine currentDir "src/IO.Ably.Tests.NETFramework/bin/Release"
- let testDll = !! (Path.combine testDir "*.Tests.*.dll")
-
- match testToRun with
- | Method testMethodName ->
- let logsPath = findNextTestPath(Path.combine testResultsDir "xunit-netframework.xml")
- testDll
- |> xUnit2 (fun p -> { p with NUnitXmlOutputPath = Some ( logsPath)
- Method = Some (trimTestMethod testMethodName)
- ErrorLevel = errorLevel
- })
- logsPath
- | UnitTests ->
- let logsPath = Path.combine testResultsDir "xunit-netframework-unit.xml"
- testDll
- |> xUnit2 (fun p -> { p with NUnitXmlOutputPath = Some logsPath
- ExcludeTraits = [ ("type", "integration")]
- ErrorLevel = errorLevel
- })
- logsPath
- | IntegrationTests ->
- let logsPath = Path.combine testResultsDir "xunit-netframework-integration.xml"
- testDll
- |> xUnit2 (fun p -> { p with NUnitXmlOutputPath = Some logsPath
- IncludeTraits = [ ("type", "integration")]
- TimeOut = TimeSpan.FromMinutes(20.)
- Parallel = ParallelMode.Collections
- ErrorLevel = errorLevel
- })
- logsPath
-
-Target.create "NetFramework.Integration.Rerun" (fun _ ->
-
- let setParams (defaults:MSBuildParams) =
- { defaults with
- Verbosity = Some(Quiet)
- Targets = ["Build"]
- Properties =
- [
- "Optimize", "True"
- "DebugSymbols", "True"
- "Configuration", buildMode
- ]
- }
- MSBuild.build setParams NetFrameworkSolution
-
-
- let logsPath = Path.combine testResultsDir "xunit-netframework-integration.xml"
-
- let failedTestNames = findFailedXUnitTests logsPath
-
- for test in failedTestNames do
- runFrameworkTests (Method test) TestRunnerErrorLevel.Error |> ignore
-)
-
-Target.create "NetFramework - Unit Tests" (fun _ ->
-
- runFrameworkTests UnitTests TestRunnerErrorLevel.Error |> ignore
-)
-
-Target.create "NetFramework - Integration Tests" ( fun _ ->
-
- let logs = runFrameworkTests IntegrationTests TestRunnerErrorLevel.DontFailBuild
-
- let failedTestNames = findFailedXUnitTests logs
-
- for test in failedTestNames do
- runFrameworkTests (Method test) TestRunnerErrorLevel.Error |> ignore
-)
-
-Target.create "NetStandard - Build" (fun _ ->
- DotNet.build (fun opts -> {
- opts with Configuration = configuration
- }) NetStandardSolution
-)
-
-Target.create "NetStandard - Unit Tests" (fun _ ->
- runStandardTests UnitTests |> ignore
-)
-
-Target.create "NetStandard - Unit Tests with retry" (fun _ ->
- let logs = runStandardTestsAllowRetry UnitTests
-
- let failedTestNames = findFailedDotnetTestTests logs
-
- for test in failedTestNames do
- runStandardTests (Method test) |> ignore
-)
-
-Target.create "NetStandard - Integration Tests" (fun _ ->
-
- let logs = runStandardTestsAllowRetry IntegrationTests
-
- let failedTestNames = findFailedDotnetTestTests logs
-
- for test in failedTestNames do
- runStandardTests (Method test) |> ignore
-)
-
-// This is duplicated before of Fake's build dependency doesn't allow
-// This this target to be run independent of the unit tests
-Target.create "NetStandard - Integration Tests with retry" (fun _ ->
-
- let logs = runStandardTestsAllowRetry IntegrationTests
-
- let failedTestNames = findFailedDotnetTestTests logs
-
- for test in failedTestNames do
- runStandardTests (Method test) |> ignore
-)
-
-Target.create "Package - Build All" (fun _ ->
- let setParams (defaults:MSBuildParams) =
- { defaults with
- Verbosity = Some(Quiet)
- Targets = ["Build"]
- Properties =
- [
- "Optimize", "True"
- "DebugSymbols", "True"
- "Configuration", buildMode
- "StyleCopEnabled", "True"
- "Package", "True"
- "DefineConstants", "PACKAGE"
- ]
- }
- MSBuild.build setParams packageSolution
-)
-
-Target.create "Push Package - Build All" (fun _ ->
- let setParams (defaults:MSBuildParams) =
- { defaults with
- Verbosity = Some(Quiet)
- Targets = ["Build"]
- Properties =
- [
- "Optimize", "True"
- "DebugSymbols", "True"
- "Configuration", "Package"
- "StyleCopEnabled", "True"
- "Package", "True"
- "DefineConstants", "PACKAGE"
- ]
- }
- MSBuild.build setParams pushPackageSolution
-)
-
-Target.create "Package - Merge json.net" (fun _ ->
- let projectsToMerge = [ "IO.Ably.Android"; "IO.Ably.iOS"; "IO.Ably.NETFramework" ]
- let binFolderPaths = projectsToMerge
- |> Seq.map (Path.combine "src")
- |> Seq.map (fun path -> sprintf "%s/bin/%s" path buildMode)
-
- // Copy all IO.Ably* files to the `packaged folder`
- binFolderPaths
- |> Seq.iter ( fun path -> !! (Path.combine path "IO.Ably*") |> Shell.copy (Path.combine path "packaged"))
-
- // Merge newtonsoft json into ably.dll and overwrite IO.Ably.dll in the packaged folder with the merged one
- binFolderPaths
- |> Seq.iter ( fun path -> mergeJsonNet path (Path.combine path "packaged"))
-
-)
-
-Target.create "Package - Create nuget" (fun _ ->
- CreateProcess.fromRawCommand "./tools/nuget.exe"
- [
- "pack"
- "./nuget/io.ably.nuspec"
- "-properties"
- sprintf "version=%s;configuration=Release" version
- ]
- |> Proc.run // start with the above configuration
- |> ignore
-)
-
-Target.create "Package - Push" (fun _ ->
- CreateProcess.fromRawCommand "nuget"
- [
- "pack"
- "./nuget/io.ably.push.android.nuspec"
- "-properties"
- sprintf "version=%s;configuration=Release" version
- ]
- |> Proc.run // start with the above configuration
- |> ignore
-
- CreateProcess.fromRawCommand "nuget"
- [
- "pack"
- "./nuget/io.ably.push.ios.nuspec"
- "-properties"
- sprintf "version=%s;configuration=Release" version
- ]
- |> Proc.run // start with the above configuration
- |> ignore
-)
-
-Target.create "Prepare" ignore
-Target.create "Build.NetFramework" ignore
-Target.create "Build.NetStandard" ignore
-Target.create "Build.Xamarin" ignore
-
-Target.create "Test.NetFramework.Unit" ignore
-Target.create "Test.NetFramework.Integration" ignore
-
-Target.create "Test.NetStandard.Unit" ignore
-Target.create "Test.NetStandard.Unit.WithRetry" ignore
-Target.create "Test.NetStandard.Integration.WithRetry" ignore
-Target.create "Test.NetStandard.Integration" ignore
-
-Target.create "Package" ignore
-Target.create "PushPackage" ignore
-
-
-
-"Clean"
- ==> "Restore"
- ==> "Prepare"
-
-"Prepare"
- ==> "NetFramework - Build"
- ==> "Build.NetFramework"
-
-"Prepare"
- ==> "Restore Xamarin"
- ==> "Xamarin - Build"
- ==> "Build.Xamarin"
-
-"Prepare"
- ==> "NetStandard - Build"
- ==> "Build.NetStandard"
-
-"Prepare"
- ==> "Version"
- ==> "Package - Build All"
- ==> "Package - Merge json.net"
- ==> "Package - Create nuget"
- ==> "Package"
-
-"Prepare"
- ==> "Version"
- ==> "Push Package - Build All"
- ==> "Package - Push"
- ==> "PushPackage"
-
-"Build.NetFramework"
- ==> "NetFramework - Unit Tests"
- ==> "Test.NetFramework.Unit"
-
-"Build.NetFramework"
- ==> "NetFramework - Integration Tests"
- ==> "Test.NetFramework.Integration"
-
-"Build.NetStandard"
- ==> "NetStandard - Unit Tests"
- ==> "Test.NetStandard.Unit"
-
-"Build.NetStandard"
- ==> "NetStandard - Integration Tests"
- ==> "Test.NetStandard.Integration"
-
-"Build.NetStandard"
- ==> "NetStandard - Unit Tests with retry"
- ==> "Test.NetStandard.Unit.WithRetry"
-
-Target.runOrDefaultWithArguments "Build.NetFramework"
diff --git a/build.fsx.lock b/build.fsx.lock
deleted file mode 100644
index 39acd3cf2..000000000
--- a/build.fsx.lock
+++ /dev/null
@@ -1,239 +0,0 @@
-STORAGE: NONE
-RESTRICTION: == netstandard2.0
-NUGET
- remote: https://api.nuget.org/v3/index.json
- BlackFox.VsWhere (1.1)
- FSharp.Core (>= 4.2.3)
- Microsoft.Win32.Registry (>= 4.7)
- Fake.Core.CommandLineParsing (5.20.4)
- FParsec (>= 1.1.1)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Context (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Environment (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.FakeVar (5.20.4)
- Fake.Core.Context (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Process (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.FakeVar (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- System.Collections.Immutable (>= 1.7.1)
- Fake.Core.SemVer (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.String (5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Target (5.20.4)
- Fake.Core.CommandLineParsing (>= 5.20.4)
- Fake.Core.Context (>= 5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.FakeVar (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Control.Reactive (>= 4.4.2)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Tasks (5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Trace (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.FakeVar (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Core.Xml (5.20.4)
- Fake.Core.String (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.DotNet.AssemblyInfoFile (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.DotNet.Cli (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.DotNet.MSBuild (>= 5.20.4)
- Fake.DotNet.NuGet (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Mono.Posix.NETStandard (>= 1.0)
- Newtonsoft.Json (>= 12.0.3)
- Fake.DotNet.MSBuild (5.20.4)
- BlackFox.VsWhere (>= 1.1)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- MSBuild.StructuredLogger (>= 2.1.176)
- Fake.DotNet.NuGet (5.20.4)
- Fake.Core.Environment (>= 5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.SemVer (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Tasks (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.Core.Xml (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- Fake.Net.Http (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Newtonsoft.Json (>= 12.0.3)
- NuGet.Protocol (>= 5.6)
- Fake.DotNet.Testing.XUnit2 (5.20.4)
- Fake.Core.Process (>= 5.20.4)
- Fake.Core.String (>= 5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- Fake.IO.FileSystem (>= 5.20.4)
- Fake.Testing.Common (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.IO.FileSystem (5.20.4)
- Fake.Core.String (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Net.Http (5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- Fake.Testing.Common (5.20.4)
- Fake.Core.Trace (>= 5.20.4)
- FSharp.Core (>= 4.7.2)
- FParsec (1.1.1)
- FSharp.Core (>= 4.3.4)
- FSharp.Control.Reactive (5.0.2)
- FSharp.Core (>= 4.7.2)
- System.Reactive (>= 5.0)
- FSharp.Core (5.0.1)
- Microsoft.Bcl.AsyncInterfaces (5.0)
- System.Threading.Tasks.Extensions (>= 4.5.4)
- Microsoft.Build (16.10)
- Microsoft.Build.Framework (>= 16.10)
- Microsoft.NET.StringTools (>= 1.0)
- Microsoft.Win32.Registry (>= 4.3)
- System.Collections.Immutable (>= 5.0)
- System.Configuration.ConfigurationManager (>= 4.7)
- System.Reflection.Metadata (>= 1.6)
- System.Security.Principal.Windows (>= 4.7)
- System.Text.Encoding.CodePages (>= 4.0.1)
- System.Text.Json (>= 4.7)
- System.Threading.Tasks.Dataflow (>= 4.9)
- Microsoft.Build.Framework (16.10)
- System.Security.Permissions (>= 4.7)
- Microsoft.Build.Tasks.Core (16.10)
- Microsoft.Build.Framework (>= 16.10)
- Microsoft.Build.Utilities.Core (>= 16.10)
- Microsoft.NET.StringTools (>= 1.0)
- Microsoft.Win32.Registry (>= 4.3)
- System.CodeDom (>= 4.4)
- System.Collections.Immutable (>= 5.0)
- System.Reflection.Metadata (>= 1.6)
- System.Resources.Extensions (>= 4.6)
- System.Security.Cryptography.Pkcs (>= 4.7)
- System.Security.Cryptography.Xml (>= 4.7)
- System.Security.Permissions (>= 4.7)
- System.Threading.Tasks.Dataflow (>= 4.9)
- Microsoft.Build.Utilities.Core (16.10)
- Microsoft.Build.Framework (>= 16.10)
- Microsoft.NET.StringTools (>= 1.0)
- Microsoft.Win32.Registry (>= 4.3)
- System.Collections.Immutable (>= 5.0)
- System.Configuration.ConfigurationManager (>= 4.7)
- System.Security.Permissions (>= 4.7)
- System.Text.Encoding.CodePages (>= 4.0.1)
- Microsoft.NET.StringTools (1.0)
- System.Memory (>= 4.5.4)
- System.Runtime.CompilerServices.Unsafe (>= 5.0)
- Microsoft.NETCore.Platforms (5.0.2)
- Microsoft.NETCore.Targets (5.0)
- Microsoft.Win32.Registry (5.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- System.Security.AccessControl (>= 5.0)
- System.Security.Principal.Windows (>= 5.0)
- Mono.Posix.NETStandard (1.0)
- MSBuild.StructuredLogger (2.1.507)
- Microsoft.Build (>= 16.4)
- Microsoft.Build.Framework (>= 16.4)
- Microsoft.Build.Tasks.Core (>= 16.4)
- Microsoft.Build.Utilities.Core (>= 16.4)
- Newtonsoft.Json (13.0.1)
- NuGet.Common (5.9.1)
- NuGet.Frameworks (>= 5.9.1)
- NuGet.Configuration (5.9.1)
- NuGet.Common (>= 5.9.1)
- System.Security.Cryptography.ProtectedData (>= 4.4)
- NuGet.Frameworks (5.9.1)
- NuGet.Packaging (5.9.1)
- Newtonsoft.Json (>= 9.0.1)
- NuGet.Configuration (>= 5.9.1)
- NuGet.Versioning (>= 5.9.1)
- System.Security.Cryptography.Cng (>= 5.0)
- System.Security.Cryptography.Pkcs (>= 5.0)
- NuGet.Protocol (5.9.1)
- NuGet.Packaging (>= 5.9.1)
- NuGet.Versioning (5.9.1)
- System.Buffers (4.5.1)
- System.CodeDom (5.0)
- System.Collections.Immutable (5.0)
- System.Memory (>= 4.5.4)
- System.Configuration.ConfigurationManager (5.0)
- System.Security.Cryptography.ProtectedData (>= 5.0)
- System.Security.Permissions (>= 5.0)
- System.Formats.Asn1 (5.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- System.Memory (4.5.4)
- System.Buffers (>= 4.5.1)
- System.Numerics.Vectors (>= 4.4)
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
- System.Numerics.Vectors (4.5)
- System.Reactive (5.0)
- System.Runtime.InteropServices.WindowsRuntime (>= 4.3)
- System.Threading.Tasks.Extensions (>= 4.5.4)
- System.Reflection.Metadata (5.0)
- System.Collections.Immutable (>= 5.0)
- System.Resources.Extensions (5.0)
- System.Memory (>= 4.5.4)
- System.Runtime (4.3.1)
- Microsoft.NETCore.Platforms (>= 1.1.1)
- Microsoft.NETCore.Targets (>= 1.1.3)
- System.Runtime.CompilerServices.Unsafe (5.0)
- System.Runtime.InteropServices.WindowsRuntime (4.3)
- System.Runtime (>= 4.3)
- System.Security.AccessControl (5.0)
- System.Security.Principal.Windows (>= 5.0)
- System.Security.Cryptography.Cng (5.0)
- System.Security.Cryptography.Pkcs (5.0.1)
- System.Buffers (>= 4.5.1)
- System.Formats.Asn1 (>= 5.0)
- System.Memory (>= 4.5.4)
- System.Security.Cryptography.Cng (>= 5.0)
- System.Security.Cryptography.ProtectedData (5.0)
- System.Memory (>= 4.5.4)
- System.Security.Cryptography.Xml (5.0)
- System.Memory (>= 4.5.4)
- System.Security.Cryptography.Pkcs (>= 5.0)
- System.Security.Permissions (>= 5.0)
- System.Security.Permissions (5.0)
- System.Security.AccessControl (>= 5.0)
- System.Security.Principal.Windows (5.0)
- System.Text.Encoding.CodePages (5.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0)
- System.Text.Encodings.Web (5.0.1)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- System.Text.Json (5.0.2)
- Microsoft.Bcl.AsyncInterfaces (>= 5.0)
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.4)
- System.Numerics.Vectors (>= 4.5)
- System.Runtime.CompilerServices.Unsafe (>= 5.0)
- System.Text.Encodings.Web (>= 5.0.1)
- System.Threading.Tasks.Extensions (>= 4.5.4)
- System.Threading.Tasks.Dataflow (5.0)
- System.Threading.Tasks.Extensions (4.5.4)
- System.Runtime.CompilerServices.Unsafe (>= 4.5.3)
diff --git a/build.sh b/build.sh
index 8dfa78f56..6abf20884 100755
--- a/build.sh
+++ b/build.sh
@@ -3,7 +3,7 @@ dotnet tool restore
if [ $# -eq 0 ]
then
- dotnet fake run build.fsx
+ dotnet run --project ./build-script/build-script.fsproj
else
- dotnet fake run build.fsx -t $@
+ dotnet run --project ./build-script/build-script.fsproj -- -t $@
fi
diff --git a/examples/NotificationsPublisher/NotificationsPublisher.csproj b/examples/NotificationsPublisher/NotificationsPublisher.csproj
index 752296cf2..189ae6a6f 100644
--- a/examples/NotificationsPublisher/NotificationsPublisher.csproj
+++ b/examples/NotificationsPublisher/NotificationsPublisher.csproj
@@ -2,8 +2,9 @@
Exe
- net5.0
+ netcoreapp3.1
..\..\src\IO.Ably.ruleset
+ 9
diff --git a/examples/NotificationsPublisher/Program.cs b/examples/NotificationsPublisher/Program.cs
index 1202806ca..981fae502 100644
--- a/examples/NotificationsPublisher/Program.cs
+++ b/examples/NotificationsPublisher/Program.cs
@@ -281,7 +281,7 @@ void InitialiseAbly(string key)
var options = new ClientOptions(key)
{
LogHandler = Logger,
- LogLevel = LogLevel.Debug,
+ LogLevel = LogLevel.Warning,
AutoConnect = false
};
Ably = new AblyRealtime(options);
diff --git a/global.json b/global.json
new file mode 100644
index 000000000..0f050ba53
--- /dev/null
+++ b/global.json
@@ -0,0 +1,6 @@
+{
+ "sdk": {
+ "version": "6.0.300",
+ "rollForward": "latestMajor"
+ }
+}
diff --git a/nuget/io.ably.nuspec b/nuget/io.ably.nuspec
index 69cfc1b2e..b46a4782f 100644
--- a/nuget/io.ably.nuspec
+++ b/nuget/io.ably.nuspec
@@ -28,5 +28,7 @@
+
+
diff --git a/package-push.sh b/package-push.sh
index e98abbec5..db8f626f2 100755
--- a/package-push.sh
+++ b/package-push.sh
@@ -9,6 +9,5 @@ if [ $# -eq 0 ]
then
echo "Provide latest version number like package-push.sh 1.2.8"
else
- dotnet tool restore
- dotnet fake run build.fsx -t PushPackage -v $1
+ ./build.sh PushPackage -v $1
fi
diff --git a/src/IO.Ably.Android/Platform.cs b/src/IO.Ably.Android/Platform.cs
index 3d55346b4..73ff9f369 100644
--- a/src/IO.Ably.Android/Platform.cs
+++ b/src/IO.Ably.Android/Platform.cs
@@ -10,7 +10,7 @@ internal class Platform : IPlatform
private static readonly object _lock = new object();
internal static bool HookedUpToNetworkEvents { get; private set; }
- public string PlatformId => "xamarin-android";
+ public Agent.PlatformRuntime PlatformId => Agent.PlatformRuntime.XamarinAndroid;
public bool SyncContextDefault => true;
public ITransportFactory TransportFactory => null;
diff --git a/src/IO.Ably.NETFramework/Platform.cs b/src/IO.Ably.NETFramework/Platform.cs
index ba1a82241..f6765f3e6 100644
--- a/src/IO.Ably.NETFramework/Platform.cs
+++ b/src/IO.Ably.NETFramework/Platform.cs
@@ -16,7 +16,7 @@ static Platform()
internal static bool HookedUpToNetworkEvents { get; private set; }
- public string PlatformId => "framework";
+ public Agent.PlatformRuntime PlatformId => Agent.PlatformRuntime.Framework;
public ITransportFactory TransportFactory => null;
diff --git a/src/IO.Ably.NETStandard20/IO.Ably.NETStandard20.csproj b/src/IO.Ably.NETStandard20/IO.Ably.NETStandard20.csproj
index f08e87b84..47c26c065 100644
--- a/src/IO.Ably.NETStandard20/IO.Ably.NETStandard20.csproj
+++ b/src/IO.Ably.NETStandard20/IO.Ably.NETStandard20.csproj
@@ -1,13 +1,17 @@
- netstandard2.0
+ netstandard2.0;net6.0;net7.0
..\IO.Ably.ruleset
Debug;Release;package
false
IO.Ably
IO.Ably
+
+
+ netstandard2.0
+
true
diff --git a/src/IO.Ably.NETStandard20/Platform.cs b/src/IO.Ably.NETStandard20/Platform.cs
index 18d21a176..72eeaa9b5 100644
--- a/src/IO.Ably.NETStandard20/Platform.cs
+++ b/src/IO.Ably.NETStandard20/Platform.cs
@@ -16,7 +16,14 @@ static Platform()
internal static bool HookedUpToNetworkEvents { get; private set; }
- public string PlatformId => "netstandard20";
+ // Defined as per https://learn.microsoft.com/en-us/dotnet/standard/frameworks#preprocessor-symbols
+#if NET6_0
+ public Agent.PlatformRuntime PlatformId => Agent.PlatformRuntime.Net6;
+#elif NET7_0
+ public Agent.PlatformRuntime PlatformId => Agent.PlatformRuntime.Net7;
+#else
+ public Agent.PlatformRuntime PlatformId => Agent.PlatformRuntime.Netstandard20;
+#endif
public ITransportFactory TransportFactory => null;
diff --git a/src/IO.Ably.NETStandard20/Properties/AssemblyInfo.cs b/src/IO.Ably.NETStandard20/Properties/AssemblyInfo.cs
index f2dc5452f..4b459f0d7 100644
--- a/src/IO.Ably.NETStandard20/Properties/AssemblyInfo.cs
+++ b/src/IO.Ably.NETStandard20/Properties/AssemblyInfo.cs
@@ -12,7 +12,7 @@
[assembly: InternalsVisibleTo("IO.Ably.Push.Android, PublicKey=002400000480000094000000060200000024000052534131000400000100010001394bb0af9eb8e04f43676c91691de20f2137847e153e27bb96cf2dedf43bce3073f699ca136fb7f9eea0d9b9c6748e9c0be5543761945e101062f8770129512c4c397a08c1b459357e7a49a4dfd7e16ac9c84d1ab3fe1177b3e7741ea10eba746433691bbf1ad643bdf25bcf397a384f96e8d138b129bdb663189200d33dcf")]
[assembly: InternalsVisibleTo("IO.Ably.Push.iOS, PublicKey=002400000480000094000000060200000024000052534131000400000100010001394bb0af9eb8e04f43676c91691de20f2137847e153e27bb96cf2dedf43bce3073f699ca136fb7f9eea0d9b9c6748e9c0be5543761945e101062f8770129512c4c397a08c1b459357e7a49a4dfd7e16ac9c84d1ab3fe1177b3e7741ea10eba746433691bbf1ad643bdf25bcf397a384f96e8d138b129bdb663189200d33dcf")]
#if !PACKAGE
-[assembly: InternalsVisibleTo("IO.Ably.Tests.DotNetCore20")]
+[assembly: InternalsVisibleTo("IO.Ably.Tests.DotNET")]
[assembly: InternalsVisibleTo("Unity.Assets.Tests.AblySandbox")]
[assembly: InternalsVisibleTo("Unity.Assets.Tests.EditMode")]
[assembly: InternalsVisibleTo("Unity.Assets.Tests.PlayMode")]
diff --git a/src/IO.Ably.NetStandard.sln b/src/IO.Ably.NetStandard.sln
index a47f1b9b5..9ceaf9a9a 100644
--- a/src/IO.Ably.NetStandard.sln
+++ b/src/IO.Ably.NetStandard.sln
@@ -29,7 +29,7 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Shared", "IO.Ably.S
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Shared.MsgPack", "IO.Ably.Shared.MsgPack\IO.Ably.Shared.MsgPack.shproj", "{EEBF3249-3CA3-4078-A188-F8B916C3F4C2}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.Tests.DotNetCore20", "IO.Ably.Tests.DotNetCore20\IO.Ably.Tests.DotNetCore20.csproj", "{4805A9DA-3412-4BE8-8B95-5A0EFDA1AC01}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.Tests.DotNET", "IO.Ably.Tests.DotNET\IO.Ably.Tests.DotNET.csproj", "{4805A9DA-3412-4BE8-8B95-5A0EFDA1AC01}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Tests.Shared", "IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.shproj", "{1609F12C-8216-4E7C-ADE0-240BFE160242}"
EndProject
diff --git a/src/IO.Ably.Shared/Agent.cs b/src/IO.Ably.Shared/Agent.cs
new file mode 100644
index 000000000..536b51370
--- /dev/null
+++ b/src/IO.Ably.Shared/Agent.cs
@@ -0,0 +1,217 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace IO.Ably
+{
+ internal static class Agent
+ {
+ public enum PlatformRuntime
+ {
+ Framework,
+ Netstandard20,
+ Net6,
+ Net7,
+ XamarinAndroid,
+ XamarinIos,
+ Other,
+ }
+
+ public static class OS
+ {
+ public const string Windows = "dotnet-windows";
+ public const string MacOS = "dotnet-macOS";
+ public const string Linux = "dotnet-linux";
+ public const string Android = "dotnet-android";
+ public const string IOS = "dotnet-iOS";
+ public const string TvOS = "dotnet-tvOS";
+ public const string WatchOS = "dotnet-watchOS";
+ public const string Browser = "dotnet-browser";
+ }
+
+ internal const string AblyAgentHeader = "Ably-Agent";
+ private static readonly string AblySdkIdentifier = $"ably-dotnet/{Defaults.LibraryVersion}"; // RSC7d1
+
+ ///
+ /// This returns dotnet platform as per ably-lib mappings defined in agents.json.
+ /// https://github.com/ably/ably-common/blob/main/protocol/agents.json.
+ /// This is required since we are migrating from 'X-Ably-Lib' header (RSC7b) to agent headers (RSC7d).
+ /// Please note that uwp platform is Deprecated and removed as a part of https://github.com/ably/ably-dotnet/pull/1101.
+ ///
+ /// Clean Platform Identifier.
+ internal static string DotnetRuntimeIdentifier()
+ {
+ string DotnetRuntimeName()
+ {
+ switch (IoC.PlatformId)
+ {
+ case PlatformRuntime.Framework:
+ return "dotnet-framework";
+ case PlatformRuntime.Netstandard20:
+ return "dotnet-standard";
+ case PlatformRuntime.Net6:
+ return "dotnet6";
+ case PlatformRuntime.Net7:
+ return "dotnet7";
+ case PlatformRuntime.XamarinAndroid:
+ return "xamarin";
+ case PlatformRuntime.XamarinIos:
+ return "xamarin";
+ }
+
+ return string.Empty;
+ }
+
+ var dotnetRuntimeName = DotnetRuntimeName();
+
+ string DotnetRuntimeVersion()
+ {
+ try
+ {
+ return Environment.Version.ToString();
+ }
+ catch
+ {
+ return string.Empty;
+ }
+ }
+
+ var dotnetRuntimeVersion = DotnetRuntimeVersion();
+
+ return dotnetRuntimeVersion.IsEmpty() ?
+ dotnetRuntimeName : $"{dotnetRuntimeName}/{dotnetRuntimeVersion}";
+ }
+
+ // Note - MAUI OS detection requires maui specific dependencies, https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/device/information?view=net-maui-7.0&tabs=windows
+ internal static string OsIdentifier()
+ {
+ switch (IoC.PlatformId)
+ {
+ // For windows only dotnet-framework, return windows OS => https://dotnet.microsoft.com/en-us/download/dotnet-framework
+ case PlatformRuntime.Framework:
+ return OS.Windows;
+ case PlatformRuntime.XamarinAndroid:
+ return OS.Android;
+ case PlatformRuntime.XamarinIos:
+ return OS.IOS;
+ }
+
+ // Preprocessors defined as per https://learn.microsoft.com/en-us/dotnet/standard/frameworks#preprocessor-symbols
+ // Get operating system as per https://stackoverflow.com/a/66618677 for .NET5 and greater
+#if NET5_0_OR_GREATER
+ if (OperatingSystem.IsWindows())
+ {
+ return OS.Windows;
+ }
+
+ if (OperatingSystem.IsLinux())
+ {
+ return OS.Linux;
+ }
+
+ if (OperatingSystem.IsMacOS())
+ {
+ return OS.MacOS;
+ }
+
+ if (OperatingSystem.IsAndroid())
+ {
+ return OS.Android;
+ }
+
+ if (OperatingSystem.IsIOS())
+ {
+ return OS.IOS;
+ }
+
+ if (OperatingSystem.IsTvOS())
+ {
+ return OS.TvOS;
+ }
+
+ if (OperatingSystem.IsWatchOS())
+ {
+ return OS.WatchOS;
+ }
+
+ if (OperatingSystem.IsBrowser())
+ {
+ return OS.Browser;
+ }
+#endif
+
+ // If netstandard target is used by .Net Core App, https://mariusschulz.com/blog/detecting-the-operating-system-in-net-core
+ try
+ {
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
+ {
+ return OS.Linux;
+ }
+
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
+ {
+ return OS.MacOS;
+ }
+
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+ {
+ return OS.Windows;
+ }
+ }
+ catch
+ {
+ // ignored
+ }
+
+ // If netstandard target is used by .Net Mono App, http://docs.go-mono.com/?link=P%3aSystem.Environment.OSVersion
+ // https://stackoverflow.com/questions/9129491/c-sharp-compiled-in-mono-detect-os
+ switch (Environment.OSVersion.Platform)
+ {
+ case PlatformID.Win32NT:
+ case PlatformID.Win32S:
+ case PlatformID.Win32Windows:
+ case PlatformID.WinCE:
+ return OS.Windows;
+ case PlatformID.Unix:
+ return OS.Linux;
+ case PlatformID.MacOSX:
+ return OS.MacOS;
+ }
+
+ return string.Empty;
+ }
+
+ internal static string AblyAgentIdentifier(Dictionary additionalAgents)
+ {
+ string GetAgentComponentString(string product, string version)
+ {
+ return string.IsNullOrEmpty(version) ? product : $"{product}/{version}";
+ }
+
+ void AddAgentIdentifier(ICollection currentAgentComponents, string product, string version = null)
+ {
+ if (!string.IsNullOrEmpty(product))
+ {
+ currentAgentComponents.Add(GetAgentComponentString(product, version));
+ }
+ }
+
+ var agentComponents = new List();
+ AddAgentIdentifier(agentComponents, AblySdkIdentifier);
+ AddAgentIdentifier(agentComponents, DotnetRuntimeIdentifier());
+ AddAgentIdentifier(agentComponents, OsIdentifier());
+
+ if (additionalAgents == null)
+ {
+ return string.Join(" ", agentComponents);
+ }
+
+ foreach (var agent in additionalAgents)
+ {
+ AddAgentIdentifier(agentComponents, agent.Key, agent.Value);
+ }
+
+ return string.Join(" ", agentComponents);
+ }
+ }
+}
diff --git a/src/IO.Ably.Shared/Defaults.cs b/src/IO.Ably.Shared/Defaults.cs
index b53474aef..cba580f26 100644
--- a/src/IO.Ably.Shared/Defaults.cs
+++ b/src/IO.Ably.Shared/Defaults.cs
@@ -3,6 +3,8 @@
using System.Globalization;
using System.Linq;
using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Security.Cryptography;
using System.Text;
using IO.Ably.Transport;
@@ -98,64 +100,5 @@ internal static string[] GetEnvironmentFallbackHosts(string environment)
$"{environment}-e-fallback.ably-realtime.com",
};
}
-
- internal const string AblyAgentHeader = "Ably-Agent";
- private static readonly string AblySdkIdentifier = $"ably-dotnet/{LibraryVersion}"; // RSC7d1
-
- ///
- /// This returns dotnet platform as per ably-lib mappings defined in agents.json.
- /// https://github.com/ably/ably-common/blob/main/protocol/agents.json.
- /// This is required since we are migrating from 'X-Ably-Lib' header (RSC7b) to agent headers (RSC7d).
- /// Please note that uwp platform is Deprecated and removed as a part of https://github.com/ably/ably-dotnet/pull/1101.
- ///
- /// Clean Platform Identifier.
- internal static string DotnetRuntimeIdentifier()
- {
- switch (IoC.PlatformId)
- {
- case "framework":
- return "dotnet-framework";
- case "netstandard20":
- return "dotnet-standard";
- case "xamarin-android":
- return "xamarin-android";
- case "xamarin-ios":
- return "xamarin-iOS";
- }
-
- return string.Empty;
- }
-
- internal static string AblyAgentIdentifier(Dictionary additionalAgents)
- {
- string GetAgentComponentString(string product, string version)
- {
- return string.IsNullOrEmpty(version) ? product : $"{product}/{version}";
- }
-
- void AddAgentIdentifier(ICollection currentAgentComponents, string product, string version = null)
- {
- if (!string.IsNullOrEmpty(product))
- {
- currentAgentComponents.Add(GetAgentComponentString(product, version));
- }
- }
-
- var agentComponents = new List();
- AddAgentIdentifier(agentComponents, AblySdkIdentifier);
- AddAgentIdentifier(agentComponents, DotnetRuntimeIdentifier());
-
- if (additionalAgents == null)
- {
- return string.Join(" ", agentComponents);
- }
-
- foreach (var agent in additionalAgents)
- {
- AddAgentIdentifier(agentComponents, agent.Key, agent.Value);
- }
-
- return string.Join(" ", agentComponents);
- }
}
}
diff --git a/src/IO.Ably.Shared/Http/AblyHttpClient.cs b/src/IO.Ably.Shared/Http/AblyHttpClient.cs
index 287107f7f..05a33337c 100644
--- a/src/IO.Ably.Shared/Http/AblyHttpClient.cs
+++ b/src/IO.Ably.Shared/Http/AblyHttpClient.cs
@@ -74,7 +74,7 @@ internal void CreateInternalHttpClient(TimeSpan timeout, HttpMessageHandler mess
{
Client = messageHandler != null ? new HttpClient(messageHandler) : new HttpClient();
Client.DefaultRequestHeaders.Add("X-Ably-Version", Defaults.ProtocolVersion);
- Client.DefaultRequestHeaders.Add(Defaults.AblyAgentHeader, Defaults.AblyAgentIdentifier(Options.Agents)); // RSC7d
+ Client.DefaultRequestHeaders.Add(Agent.AblyAgentHeader, Agent.AblyAgentIdentifier(Options.Agents)); // RSC7d
Client.Timeout = timeout;
}
diff --git a/src/IO.Ably.Shared/HttpUtility.cs b/src/IO.Ably.Shared/HttpUtility.cs
index 87bbd0ea0..fff57d766 100644
--- a/src/IO.Ably.Shared/HttpUtility.cs
+++ b/src/IO.Ably.Shared/HttpUtility.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
-using kvp = System.Collections.Generic.KeyValuePair;
+using Kvp = System.Collections.Generic.KeyValuePair;
namespace IO.Ably
{
@@ -34,7 +34,7 @@ public static HttpValueCollection ParseQueryString(string query)
///
public class HttpValueCollection
{
- private readonly List _data = new List();
+ private readonly List _data = new List();
///
/// All the keys.
@@ -66,7 +66,7 @@ public string this[string name]
{
// If the specified key already exists in the collection, setting this property overwrites the existing list of values with the specified value.
_data.RemoveAll(i => i.Key == name);
- _data.Add(new kvp(name, value));
+ _data.Add(new Kvp(name, value));
}
}
@@ -93,7 +93,7 @@ public string[] GetValues(string name)
/// value.
public void Add(string name, string value)
{
- _data.Add(new kvp(name, value));
+ _data.Add(new Kvp(name, value));
}
///
diff --git a/src/IO.Ably.Shared/IO.Ably.Shared.projitems b/src/IO.Ably.Shared/IO.Ably.Shared.projitems
index d22b5969d..3d5c5227c 100644
--- a/src/IO.Ably.Shared/IO.Ably.Shared.projitems
+++ b/src/IO.Ably.Shared/IO.Ably.Shared.projitems
@@ -14,6 +14,7 @@
+
diff --git a/src/IO.Ably.Shared/IPlatform.cs b/src/IO.Ably.Shared/IPlatform.cs
index 37d788bc5..d90983244 100644
--- a/src/IO.Ably.Shared/IPlatform.cs
+++ b/src/IO.Ably.Shared/IPlatform.cs
@@ -3,19 +3,18 @@
namespace IO.Ably
{
- [System.Diagnostics.CodeAnalysis.SuppressMessage(
- "StyleCop.CSharp.DocumentationRules",
- "SA1600:Elements should be documented",
- Justification = "Internal interface")]
-
///
/// This interface is implemented for each platform .NETFramework, NetStandard,
/// iOS and Android. The library dynamically creates an instance of Platform in
/// IoC.cs. It lets us deal with the differences in the various platforms.
///
+ [System.Diagnostics.CodeAnalysis.SuppressMessage(
+ "StyleCop.CSharp.DocumentationRules",
+ "SA1600:Elements should be documented",
+ Justification = "Internal interface")]
internal interface IPlatform
{
- string PlatformId { get; }
+ Agent.PlatformRuntime PlatformId { get; }
ITransportFactory TransportFactory { get; }
diff --git a/src/IO.Ably.Shared/IoC.cs b/src/IO.Ably.Shared/IoC.cs
index c1c1159b1..a16fe0f25 100644
--- a/src/IO.Ably.Shared/IoC.cs
+++ b/src/IO.Ably.Shared/IoC.cs
@@ -39,7 +39,7 @@ static IoC()
public static void RegisterOsNetworkStateChanged() => Platform.RegisterOsNetworkStateChanged();
- public static string PlatformId => Platform?.PlatformId ?? string.Empty;
+ public static Agent.PlatformRuntime PlatformId => Platform?.PlatformId ?? Agent.PlatformRuntime.Other;
public static IMobileDevice MobileDevice
{
diff --git a/src/IO.Ably.Shared/Realtime/RealtimeChannel.cs b/src/IO.Ably.Shared/Realtime/RealtimeChannel.cs
index f7055babf..9e3395b27 100644
--- a/src/IO.Ably.Shared/Realtime/RealtimeChannel.cs
+++ b/src/IO.Ably.Shared/Realtime/RealtimeChannel.cs
@@ -18,7 +18,10 @@ namespace IO.Ably.Realtime
[DebuggerDisplay("{Name}. State = {_state}. Error = {ErrorReason} ")]
internal class RealtimeChannel : EventEmitter, IRealtimeChannel
{
+#pragma warning disable CA2213
private readonly Handlers _handlers = new Handlers();
+#pragma warning restore CA2213
+
private ChannelOptions _options;
private ChannelState _state;
private readonly PushChannel _pushChannel;
diff --git a/src/IO.Ably.Shared/Transport/TransportParams.cs b/src/IO.Ably.Shared/Transport/TransportParams.cs
index 3877ac1eb..e43eecf1a 100644
--- a/src/IO.Ably.Shared/Transport/TransportParams.cs
+++ b/src/IO.Ably.Shared/Transport/TransportParams.cs
@@ -189,7 +189,7 @@ public Dictionary GetParams()
}
result["v"] = Defaults.ProtocolVersion;
- result[Defaults.AblyAgentHeader] = Defaults.AblyAgentIdentifier(Agents);
+ result[Agent.AblyAgentHeader] = Agent.AblyAgentIdentifier(Agents);
// Url encode all the params at the time of creating the query string
result["format"] = UseBinaryProtocol ? "msgpack" : "json";
diff --git a/src/IO.Ably.Tests.DotNetCore20/IO.Ably.Tests.DotNetCore20.csproj b/src/IO.Ably.Tests.DotNET/IO.Ably.Tests.DotNET.csproj
similarity index 96%
rename from src/IO.Ably.Tests.DotNetCore20/IO.Ably.Tests.DotNetCore20.csproj
rename to src/IO.Ably.Tests.DotNET/IO.Ably.Tests.DotNET.csproj
index af142de46..4c5436e5b 100644
--- a/src/IO.Ably.Tests.DotNetCore20/IO.Ably.Tests.DotNetCore20.csproj
+++ b/src/IO.Ably.Tests.DotNET/IO.Ably.Tests.DotNET.csproj
@@ -1,12 +1,12 @@
- netcoreapp3.1
+ net6.0;net7.0
..\IO.Ably.Tests.ruleset
8
-
+
1701;1702;SA0001;NU1701
diff --git a/src/IO.Ably.Tests.DotNetCore20/MsgPackStatsTest.json b/src/IO.Ably.Tests.DotNET/MsgPackStatsTest.json
similarity index 100%
rename from src/IO.Ably.Tests.DotNetCore20/MsgPackStatsTest.json
rename to src/IO.Ably.Tests.DotNET/MsgPackStatsTest.json
diff --git a/src/IO.Ably.Tests.DotNetCore20/StatsFixture.json b/src/IO.Ably.Tests.DotNET/StatsFixture.json
similarity index 100%
rename from src/IO.Ably.Tests.DotNetCore20/StatsFixture.json
rename to src/IO.Ably.Tests.DotNET/StatsFixture.json
diff --git a/src/IO.Ably.Tests.DotNetCore20/StatsInterval.json b/src/IO.Ably.Tests.DotNET/StatsInterval.json
similarity index 100%
rename from src/IO.Ably.Tests.DotNetCore20/StatsInterval.json
rename to src/IO.Ably.Tests.DotNET/StatsInterval.json
diff --git a/src/IO.Ably.Tests.DotNetCore20/xunit.runner.json b/src/IO.Ably.Tests.DotNET/xunit.runner.json
similarity index 100%
rename from src/IO.Ably.Tests.DotNetCore20/xunit.runner.json
rename to src/IO.Ably.Tests.DotNET/xunit.runner.json
diff --git a/src/IO.Ably.Tests.NETFramework/IO.Ably.Tests.NETFramework.csproj b/src/IO.Ably.Tests.NETFramework/IO.Ably.Tests.NETFramework.csproj
index 86d9ca85a..fa35e1740 100644
--- a/src/IO.Ably.Tests.NETFramework/IO.Ably.Tests.NETFramework.csproj
+++ b/src/IO.Ably.Tests.NETFramework/IO.Ably.Tests.NETFramework.csproj
@@ -142,15 +142,15 @@
all
+
+
+
{2d265650-b1ec-4f8d-b043-a2e3dcc23fd8}
IO.Ably.NETFramework
-
-
-
\ No newline at end of file
diff --git a/src/IO.Ably.Tests.Shared/ChannelOptionsExtensions.cs b/src/IO.Ably.Tests.Shared/Extensions/ChannelOptionsExtensions.cs
similarity index 98%
rename from src/IO.Ably.Tests.Shared/ChannelOptionsExtensions.cs
rename to src/IO.Ably.Tests.Shared/Extensions/ChannelOptionsExtensions.cs
index df98a7aa7..615e5f0d5 100644
--- a/src/IO.Ably.Tests.Shared/ChannelOptionsExtensions.cs
+++ b/src/IO.Ably.Tests.Shared/Extensions/ChannelOptionsExtensions.cs
@@ -1,6 +1,6 @@
using System;
-namespace IO.Ably.Tests.DotNetCore20
+namespace IO.Ably.Tests.Extensions
{
///
/// Helper methods to make adding channel options easier.
diff --git a/src/IO.Ably.Tests.Shared/IO.Ably.Tests.Shared.projitems b/src/IO.Ably.Tests.Shared/IO.Ably.Tests.Shared.projitems
index f47b7c171..3883abbfd 100644
--- a/src/IO.Ably.Tests.Shared/IO.Ably.Tests.Shared.projitems
+++ b/src/IO.Ably.Tests.Shared/IO.Ably.Tests.Shared.projitems
@@ -20,7 +20,6 @@
-
@@ -31,6 +30,7 @@
+
diff --git a/src/IO.Ably.Tests.Shared/Realtime/ChannelSandboxSpecs.cs b/src/IO.Ably.Tests.Shared/Realtime/ChannelSandboxSpecs.cs
index 1074733ee..4ffa72aed 100644
--- a/src/IO.Ably.Tests.Shared/Realtime/ChannelSandboxSpecs.cs
+++ b/src/IO.Ably.Tests.Shared/Realtime/ChannelSandboxSpecs.cs
@@ -8,7 +8,7 @@
using FluentAssertions;
using IO.Ably.Encryption;
using IO.Ably.Realtime;
-using IO.Ably.Tests.DotNetCore20;
+using IO.Ably.Tests.Extensions;
using IO.Ably.Tests.Infrastructure;
using IO.Ably.Types;
using Newtonsoft.Json.Linq;
diff --git a/src/IO.Ably.Tests.Shared/Realtime/ConnectionSpecs/ConnectionParameterSpecs.cs b/src/IO.Ably.Tests.Shared/Realtime/ConnectionSpecs/ConnectionParameterSpecs.cs
index 140ada310..20955e4d7 100644
--- a/src/IO.Ably.Tests.Shared/Realtime/ConnectionSpecs/ConnectionParameterSpecs.cs
+++ b/src/IO.Ably.Tests.Shared/Realtime/ConnectionSpecs/ConnectionParameterSpecs.cs
@@ -125,16 +125,19 @@ public async Task ShouldSetTransportAblyAgentHeader()
{
_ = await GetConnectedClient();
- LastCreatedTransport.Parameters.GetParams().Should().ContainKey(Defaults.AblyAgentHeader);
- var agentValues = LastCreatedTransport.Parameters.GetParams()[Defaults.AblyAgentHeader].Split(' ');
- string[] keys =
+ LastCreatedTransport.Parameters.GetParams().Should().ContainKey(Agent.AblyAgentHeader);
+ var agentValues = LastCreatedTransport.Parameters.GetParams()[Agent.AblyAgentHeader].Split(' ');
+ var keys = new List()
{
"ably-dotnet/",
- Defaults.DotnetRuntimeIdentifier()
+ Agent.DotnetRuntimeIdentifier(),
+ Agent.OsIdentifier()
};
- agentValues.Should().HaveCount(keys.Length);
- for (int i = 0; i < keys.Length; ++i)
+ keys.RemoveAll(s => s == string.Empty);
+
+ agentValues.Should().HaveCount(keys.Count);
+ for (var i = 0; i < keys.Count; ++i)
{
agentValues[i].StartsWith(keys[i]).Should().BeTrue($"'{agentValues[i]}' should start with '{keys[i]}'");
}
@@ -153,18 +156,21 @@ public async Task ShouldSetTransportCustomAblyAgentHeader()
};
});
- LastCreatedTransport.Parameters.GetParams().Should().ContainKey(Defaults.AblyAgentHeader);
- var agentValues = LastCreatedTransport.Parameters.GetParams()[Defaults.AblyAgentHeader].Split(' ');
- string[] keys =
+ LastCreatedTransport.Parameters.GetParams().Should().ContainKey(Agent.AblyAgentHeader);
+ var agentValues = LastCreatedTransport.Parameters.GetParams()[Agent.AblyAgentHeader].Split(' ');
+ var keys = new List()
{
"ably-dotnet/",
- Defaults.DotnetRuntimeIdentifier(),
+ Agent.DotnetRuntimeIdentifier(),
+ Agent.OsIdentifier(),
"agent1",
"agent2",
};
- agentValues.Should().HaveCount(keys.Length);
- for (var i = 0; i < keys.Length; ++i)
+ keys.RemoveAll(s => s == string.Empty);
+
+ agentValues.Should().HaveCount(keys.Count);
+ for (var i = 0; i < keys.Count; ++i)
{
agentValues[i].StartsWith(keys[i]).Should().BeTrue($"'{agentValues[i]}' should start with '{keys[i]}'");
}
diff --git a/src/IO.Ably.Tests.Shared/Rest/AblyHttpClientSpecs.cs b/src/IO.Ably.Tests.Shared/Rest/AblyHttpClientSpecs.cs
index 278733114..762ef8aca 100644
--- a/src/IO.Ably.Tests.Shared/Rest/AblyHttpClientSpecs.cs
+++ b/src/IO.Ably.Tests.Shared/Rest/AblyHttpClientSpecs.cs
@@ -95,14 +95,19 @@ public async Task WhenCallingUrl_AddsDefaultAblyAgentHeader()
values.Should().HaveCount(1);
string[] agentValues = values[0].Split(' ');
- string[] keys =
+ var keys = new List()
{
"ably-dotnet/",
- Defaults.DotnetRuntimeIdentifier()
+ Agent.DotnetRuntimeIdentifier(),
+ Agent.OsIdentifier()
};
- agentValues.Should().HaveCount(keys.Length);
- for (int i = 0; i < keys.Length; ++i)
+ Agent.DotnetRuntimeIdentifier().Split('/').Length.Should().Be(2);
+
+ keys.RemoveAll(s => s.IsEmpty());
+
+ agentValues.Should().HaveCount(keys.Count);
+ for (var i = 0; i < keys.Count; ++i)
{
agentValues[i].StartsWith(keys[i]).Should().BeTrue($"'{agentValues[i]}' should start with '{keys[i]}'");
}
@@ -131,16 +136,19 @@ public async Task WhenCallingUrl_AddsCustomizedAblyAgentHeader()
values.Should().HaveCount(1);
string[] agentValues = values[0].Split(' ');
- string[] keys =
+ var keys = new List()
{
"ably-dotnet/",
- Defaults.DotnetRuntimeIdentifier(),
+ Agent.DotnetRuntimeIdentifier(),
+ Agent.OsIdentifier(),
"agent1",
"agent2",
};
- agentValues.Should().HaveCount(keys.Length);
- for (var i = 0; i < keys.Length; ++i)
+ keys.RemoveAll(s => s.IsEmpty());
+
+ agentValues.Should().HaveCount(keys.Count);
+ for (var i = 0; i < keys.Count; ++i)
{
agentValues[i].StartsWith(keys[i]).Should().BeTrue($"'{agentValues[i]}' should start with '{keys[i]}'");
}
diff --git a/src/IO.Ably.Tests.Shared/Rest/JwtSandboxSpec.cs b/src/IO.Ably.Tests.Shared/Rest/JwtSandboxSpec.cs
index e8e4aedbc..2cb96e581 100644
--- a/src/IO.Ably.Tests.Shared/Rest/JwtSandboxSpec.cs
+++ b/src/IO.Ably.Tests.Shared/Rest/JwtSandboxSpec.cs
@@ -215,5 +215,11 @@ private async Task GetJwtStringAsync(
var jwtStr = await _httpClient.GetStringAsync(builder.Uri);
return jwtStr;
}
+
+ protected override void Dispose(bool disposing)
+ {
+ _httpClient.Dispose();
+ base.Dispose(disposing);
+ }
}
}
diff --git a/src/IO.Ably.Xamarin.sln b/src/IO.Ably.Xamarin.sln
index b2be955a2..30c44b4d4 100644
--- a/src/IO.Ably.Xamarin.sln
+++ b/src/IO.Ably.Xamarin.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.28729.10
+# Visual Studio Version 17
+VisualStudioVersion = 17.4.33213.308
MinimumVisualStudioVersion = 15.0.26730.10
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1EA29F05-BF68-4BA8-A58F-C7C131E3FC62}"
ProjectSection(SolutionItems) = preProject
@@ -14,9 +14,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Solution Items", ".Solutio
CommonAssemblyInfo.cs = CommonAssemblyInfo.cs
..\nuget\io.ably.nuspec = ..\nuget\io.ably.nuspec
IO.Ably.ruleset = IO.Ably.ruleset
+ ..\PushNotifications.md = ..\PushNotifications.md
..\README.md = ..\README.md
stylecop.json = stylecop.json
- ..\PushNotifications.md = ..\PushNotifications.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ably", "Ably", "{8A0F718E-2168-4CC7-8F7B-A65508B52B0F}"
@@ -35,33 +35,27 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Shared.MsgPack", "I
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Tests.Shared", "IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.shproj", "{1609F12C-8216-4E7C-ADE0-240BFE160242}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.DeltaCodec", "..\lib\delta-codec\IO.Ably.DeltaCodec\IO.Ably.DeltaCodec.csproj", "{53CA3FD4-E11A-4368-A7A5-BCAB40D08BED}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.DeltaCodec", "..\lib\delta-codec\IO.Ably.DeltaCodec\IO.Ably.DeltaCodec.csproj", "{53CA3FD4-E11A-4368-A7A5-BCAB40D08BED}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.NETStandard20", "IO.Ably.NETStandard20\IO.Ably.NETStandard20.csproj", "{97ED15E5-6546-4437-BF4F-B929700CE922}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.NETStandard20", "IO.Ably.NETStandard20\IO.Ably.NETStandard20.csproj", "{97ED15E5-6546-4437-BF4F-B929700CE922}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.Push.Android", "IO.Ably.Push.Android\IO.Ably.Push.Android.csproj", "{F0010AA8-63C3-47D7-95E9-A5D1D04DA325}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.Push.iOS", "IO.Ably.Push.iOS\IO.Ably.Push.iOS.csproj", "{E1A8FDE2-FEFC-403E-99A0-F13847B1495E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.Tests.DotNetCore20", "IO.Ably.Tests.DotNetCore20\IO.Ably.Tests.DotNetCore20.csproj", "{9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotnetPush", "..\examples\DotnetPush\DotnetPush\DotnetPush.csproj", "{E04ACB26-B65F-43CB-AC30-B6523A7B93C4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotnetPush", "..\examples\DotnetPush\DotnetPush\DotnetPush.csproj", "{E04ACB26-B65F-43CB-AC30-B6523A7B93C4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotnetPush.Android", "..\examples\DotnetPush\DotnetPush.Android\DotnetPush.Android.csproj", "{7050F177-1D55-4562-937C-56D117198BFB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationsPublisher", "..\examples\NotificationsPublisher\NotificationsPublisher.csproj", "{D150CE86-80D9-4709-B0BC-5E1A3AA457A9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotificationsPublisher", "..\examples\NotificationsPublisher\NotificationsPublisher.csproj", "{D150CE86-80D9-4709-B0BC-5E1A3AA457A9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotnetPush.iOS", "..\examples\DotnetPush\DotnetPush.iOS\DotnetPush.iOS.csproj", "{75256FFE-5F9A-4F4F-BD78-37F6489488FD}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.Tests.NETFramework", "IO.Ably.Tests.NETFramework\IO.Ably.Tests.NETFramework.csproj", "{567FEEF7-41AF-42F2-AD34-546A278355B1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.NETFramework", "IO.Ably.NETFramework\IO.Ably.NETFramework.csproj", "{2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}"
+EndProject
Global
- GlobalSection(SharedMSBuildProjectFiles) = preSolution
- IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{1609f12c-8216-4e7c-ade0-240bfe160242}*SharedItemsImports = 13
- IO.Ably.Shared\IO.Ably.Shared.projitems*{24b6fc97-9d3d-46ae-b5cb-47458354bee1}*SharedItemsImports = 4
- IO.Ably.Shared\IO.Ably.Shared.projitems*{3553e1b2-8f1f-4e83-9524-08e702c14fcf}*SharedItemsImports = 13
- IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{567feef7-41af-42f2-ad34-546a278355b1}*SharedItemsImports = 4
- IO.Ably.Shared\IO.Ably.Shared.projitems*{8bb7b13c-e9f4-4d1b-bccc-af890a23ece6}*SharedItemsImports = 4
- IO.Ably.Shared.MsgPack\IO.Ably.Shared.MsgPack.projitems*{eebf3249-3ca3-4078-a188-f8b916c3f4c2}*SharedItemsImports = 13
- EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
AppStore|Any CPU = AppStore|Any CPU
AppStore|ARM = AppStore|ARM
@@ -481,70 +475,6 @@ Global
{E1A8FDE2-FEFC-403E-99A0-F13847B1495E}.Release|x64.Build.0 = Release|Any CPU
{E1A8FDE2-FEFC-403E-99A0-F13847B1495E}.Release|x86.ActiveCfg = Release|Any CPU
{E1A8FDE2-FEFC-403E-99A0-F13847B1495E}.Release|x86.Build.0 = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.AppStore|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.CI_Release|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug 4.0|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Debug|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package_netstandard|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.package|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|Any CPU.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|Any CPU.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|ARM.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|ARM.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|x64.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|x64.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|x86.ActiveCfg = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release 4.0|x86.Build.0 = Debug|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|Any CPU.Build.0 = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|ARM.ActiveCfg = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|ARM.Build.0 = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|x64.ActiveCfg = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|x64.Build.0 = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|x86.ActiveCfg = Release|Any CPU
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C}.Release|x86.Build.0 = Release|Any CPU
{E04ACB26-B65F-43CB-AC30-B6523A7B93C4}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{E04ACB26-B65F-43CB-AC30-B6523A7B93C4}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{E04ACB26-B65F-43CB-AC30-B6523A7B93C4}.AppStore|ARM.ActiveCfg = Debug|Any CPU
@@ -761,6 +691,8 @@ Global
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug 4.0|x64.Build.0 = Debug|iPhoneSimulator
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug 4.0|x86.ActiveCfg = Debug|iPhoneSimulator
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug 4.0|x86.Build.0 = Debug|iPhoneSimulator
+ {75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|Any CPU.ActiveCfg = Debug|iPhone
+ {75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|Any CPU.Build.0 = Debug|iPhone
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|ARM.Build.0 = Debug|iPhoneSimulator
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator
@@ -799,8 +731,134 @@ Global
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Release|x64.Build.0 = Release|iPhoneSimulator
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Release|x86.ActiveCfg = Release|iPhoneSimulator
{75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Release|x86.Build.0 = Release|iPhoneSimulator
- {75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|Any CPU.ActiveCfg = Debug|iPhone
- {75256FFE-5F9A-4F4F-BD78-37F6489488FD}.Debug|Any CPU.Build.0 = Debug|iPhone
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|x64.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.AppStore|x86.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|Any CPU.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|ARM.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|ARM.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|x64.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|x64.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|x86.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.CI_Release|x86.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|Any CPU.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|Any CPU.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|ARM.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|ARM.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|x64.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|x64.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|x86.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug 4.0|x86.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|x64.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Debug|x86.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|Any CPU.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|Any CPU.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|ARM.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|ARM.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|x64.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|x64.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|x86.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package_netstandard|x86.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|Any CPU.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|Any CPU.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|ARM.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|ARM.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|x64.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|x64.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|x86.ActiveCfg = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.package|x86.Build.0 = Debug|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|Any CPU.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|Any CPU.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|ARM.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|ARM.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|x64.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|x64.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|x86.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release 4.0|x86.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|ARM.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|x64.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|x64.Build.0 = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|x86.ActiveCfg = Release|Any CPU
+ {567FEEF7-41AF-42F2-AD34-546A278355B1}.Release|x86.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|x64.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.AppStore|x86.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|Any CPU.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|ARM.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|ARM.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|x64.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|x64.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|x86.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.CI_Release|x86.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|Any CPU.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|ARM.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|ARM.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|x64.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|x64.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|x86.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug 4.0|x86.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|ARM.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|x64.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Debug|x86.Build.0 = Debug|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|Any CPU.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|Any CPU.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|ARM.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|ARM.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|x64.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|x64.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|x86.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package_netstandard|x86.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|Any CPU.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|Any CPU.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|ARM.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|ARM.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|x64.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|x64.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|x86.ActiveCfg = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.package|x86.Build.0 = package|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|Any CPU.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|Any CPU.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|ARM.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|ARM.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|x64.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|x64.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|x86.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release 4.0|x86.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|ARM.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|x64.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|x64.Build.0 = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|x86.ActiveCfg = Release|Any CPU
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -815,13 +873,24 @@ Global
{97ED15E5-6546-4437-BF4F-B929700CE922} = {8A0F718E-2168-4CC7-8F7B-A65508B52B0F}
{F0010AA8-63C3-47D7-95E9-A5D1D04DA325} = {8A0F718E-2168-4CC7-8F7B-A65508B52B0F}
{E1A8FDE2-FEFC-403E-99A0-F13847B1495E} = {8A0F718E-2168-4CC7-8F7B-A65508B52B0F}
- {9922FA1F-F9E8-44FD-8B51-39E7C7D7737C} = {C2F43DB7-AAA0-4687-9897-5D686EC91245}
{E04ACB26-B65F-43CB-AC30-B6523A7B93C4} = {390019FF-0139-4EB0-90FF-9BF6E68BEB42}
{7050F177-1D55-4562-937C-56D117198BFB} = {390019FF-0139-4EB0-90FF-9BF6E68BEB42}
{D150CE86-80D9-4709-B0BC-5E1A3AA457A9} = {390019FF-0139-4EB0-90FF-9BF6E68BEB42}
{75256FFE-5F9A-4F4F-BD78-37F6489488FD} = {390019FF-0139-4EB0-90FF-9BF6E68BEB42}
+ {567FEEF7-41AF-42F2-AD34-546A278355B1} = {C2F43DB7-AAA0-4687-9897-5D686EC91245}
+ {2D265650-B1EC-4F8D-B043-A2E3DCC23FD8} = {8A0F718E-2168-4CC7-8F7B-A65508B52B0F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {F69D4156-FC22-4B8E-AD72-2A7323D42CC4}
EndGlobalSection
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{1609f12c-8216-4e7c-ade0-240bfe160242}*SharedItemsImports = 13
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{24b6fc97-9d3d-46ae-b5cb-47458354bee1}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{2d265650-b1ec-4f8d-b043-a2e3dcc23fd8}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{3553e1b2-8f1f-4e83-9524-08e702c14fcf}*SharedItemsImports = 13
+ IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{567feef7-41af-42f2-ad34-546a278355b1}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{8bb7b13c-e9f4-4d1b-bccc-af890a23ece6}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{97ed15e5-6546-4437-bf4f-b929700ce922}*SharedItemsImports = 5
+ IO.Ably.Shared.MsgPack\IO.Ably.Shared.MsgPack.projitems*{eebf3249-3ca3-4078-a188-f8b916c3f4c2}*SharedItemsImports = 13
+ EndGlobalSection
EndGlobal
diff --git a/src/IO.Ably.iOS/Platform.cs b/src/IO.Ably.iOS/Platform.cs
index 4382b0c5f..6c65efa27 100644
--- a/src/IO.Ably.iOS/Platform.cs
+++ b/src/IO.Ably.iOS/Platform.cs
@@ -10,7 +10,7 @@ internal class Platform : IPlatform
private static readonly object _lock = new object();
internal static bool HookedUpToNetworkEvents { get; private set; }
- public string PlatformId => "xamarin-ios";
+ public Agent.PlatformRuntime PlatformId => Agent.PlatformRuntime.XamarinIos;
public ITransportFactory TransportFactory => null;
public IMobileDevice MobileDevice { get; set; }
diff --git a/src/IO.Ably.sln b/src/IO.Ably.sln
index 9234b9465..05d848f0f 100644
--- a/src/IO.Ably.sln
+++ b/src/IO.Ably.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.28729.10
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31919.166
MinimumVisualStudioVersion = 15.0.26730.10
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{1EA29F05-BF68-4BA8-A58F-C7C131E3FC62}"
ProjectSection(SolutionItems) = preProject
@@ -40,22 +40,13 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Shared.MsgPack", "I
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AndroidSample", "..\examples\AndroidSample\AndroidSample.csproj", "{4F519937-3F75-49D7-A71E-79A6C798C5B8}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.Tests.DotNetCore20", "IO.Ably.Tests.DotNetCore20\IO.Ably.Tests.DotNetCore20.csproj", "{4805A9DA-3412-4BE8-8B95-5A0EFDA1AC01}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.Tests.DotNET", "IO.Ably.Tests.DotNET\IO.Ably.Tests.DotNET.csproj", "{4805A9DA-3412-4BE8-8B95-5A0EFDA1AC01}"
EndProject
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "IO.Ably.Tests.Shared", "IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.shproj", "{1609F12C-8216-4E7C-ADE0-240BFE160242}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IO.Ably.DeltaCodec", "..\lib\delta-codec\IO.Ably.DeltaCodec\IO.Ably.DeltaCodec.csproj", "{412DEB5F-7936-4027-8BF8-977F23D465ED}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IO.Ably.DeltaCodec", "..\lib\delta-codec\IO.Ably.DeltaCodec\IO.Ably.DeltaCodec.csproj", "{412DEB5F-7936-4027-8BF8-977F23D465ED}"
EndProject
Global
- GlobalSection(SharedMSBuildProjectFiles) = preSolution
- IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{1609f12c-8216-4e7c-ade0-240bfe160242}*SharedItemsImports = 13
- IO.Ably.Shared\IO.Ably.Shared.projitems*{24b6fc97-9d3d-46ae-b5cb-47458354bee1}*SharedItemsImports = 4
- IO.Ably.Shared\IO.Ably.Shared.projitems*{2d265650-b1ec-4f8d-b043-a2e3dcc23fd8}*SharedItemsImports = 4
- IO.Ably.Shared\IO.Ably.Shared.projitems*{3553e1b2-8f1f-4e83-9524-08e702c14fcf}*SharedItemsImports = 13
- IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{567feef7-41af-42f2-ad34-546a278355b1}*SharedItemsImports = 4
- IO.Ably.Shared\IO.Ably.Shared.projitems*{8bb7b13c-e9f4-4d1b-bccc-af890a23ece6}*SharedItemsImports = 4
- IO.Ably.Shared.MsgPack\IO.Ably.Shared.MsgPack.projitems*{eebf3249-3ca3-4078-a188-f8b916c3f4c2}*SharedItemsImports = 13
- EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
@@ -223,4 +214,15 @@ Global
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {F69D4156-FC22-4B8E-AD72-2A7323D42CC4}
EndGlobalSection
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{1609f12c-8216-4e7c-ade0-240bfe160242}*SharedItemsImports = 13
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{24b6fc97-9d3d-46ae-b5cb-47458354bee1}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{2d265650-b1ec-4f8d-b043-a2e3dcc23fd8}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{3553e1b2-8f1f-4e83-9524-08e702c14fcf}*SharedItemsImports = 13
+ IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{4805a9da-3412-4be8-8b95-5a0efda1ac01}*SharedItemsImports = 5
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{48ea337f-ae7b-4001-bd8c-da1668fc6cbd}*SharedItemsImports = 5
+ IO.Ably.Tests.Shared\IO.Ably.Tests.Shared.projitems*{567feef7-41af-42f2-ad34-546a278355b1}*SharedItemsImports = 4
+ IO.Ably.Shared\IO.Ably.Shared.projitems*{8bb7b13c-e9f4-4d1b-bccc-af890a23ece6}*SharedItemsImports = 4
+ IO.Ably.Shared.MsgPack\IO.Ably.Shared.MsgPack.projitems*{eebf3249-3ca3-4078-a188-f8b916c3f4c2}*SharedItemsImports = 13
+ EndGlobalSection
EndGlobal
diff --git a/tools/mono-install.sh b/tools/mono-install.sh
new file mode 100755
index 000000000..03b018c49
--- /dev/null
+++ b/tools/mono-install.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -ex
+
+# Get the macos universal pkg installer download url
+# for the version you want to install from: https://download.mono-project.com/archive/
+# and set it here as the value of this variable:
+MONO_MACOS_PKG_DOWNLOAD_URL='https://download.mono-project.com/archive/6.12.0/macos-10-universal/MonoFramework-MDK-6.12.0.190.macos10.xamarin.universal.pkg'
+
+# create a temp dir and cd into it
+mkdir -p /tmp/mono-install
+cd /tmp/mono-install
+
+# debug: mono version before the install
+mono --version
+
+# download mono mac installer (pkg)
+wget -q -O ./mono-installer.pkg "$MONO_MACOS_PKG_DOWNLOAD_URL"
+
+# install it
+sudo installer -pkg ./mono-installer.pkg -target /
+
+# debug: mono version after install, just to confirm it did overwrite the original version
+mono --version
+
+# just for fun print this symlink too, which should point to the version we just installed
+ls -alh /Library/Frameworks/Mono.framework/Versions/Current