xiazen/Oxygen

CrawlPhase: .Net Core Compatibility

Opened this issue · 1 comments

This issue will track the CRAWL phase of Orleans 2.X milestone as tracked by #2143
The idea with this task is to basically make Orleans Core compatible with .Net Core, by having it target .Net Standard and have the minimal impact as possible in the current codebase.
Since .Net Core tooling still unreliable and will (drastically) change before it reach RTM, we are following the guidelines from here and in a new temporary solution we will work at master branch.
The target is to have Orleans building and running on .Net Full CLR and .Net Core (hence why target .Net Standard) on Windows and have the full test set only for the .Net Full CLR (.Net 4.6.1+) while having basic validation on .Net Core on Windows.
We will focus on Windows as a baseline but that doesn't mean people can't run tests on Linux/OSX once this work is done. That means that the core test set will focus on .Net Full CLR and basic .Net Core on Windows but you can test your Orleans application on .Net Core supported OSes. The test framework should stay as is. That means the major efforts will not be to update the test kit to multiple OSes and full .Net Core coverage but, if you feel comfortable, we still accept (and really encourage and appreciate!) PRs however, it will take lower priority (and of course efforts on review) from the core team and people from the community working on this port.
Here are the macro tasks and its issues that will be tracked for this phase:

Add new solution targeting .Net Standard Library 1.5 (netstandard15) - #2177

Build Orleans.vNext.sln in the CI Build.cmd script - #2353 #2362

Replace Binary Serializer - #2162

Move Performance Counters to its own TelemetryConsumer - #2122

Use supported overloads from Socket class - #2195

Remove usage of named mutexes #2366

Remove AppDomain usage for assembly loading/scanning - #2025 and in continued progress by @attilah

Run non-silo tests (not blocked by Silo not working in memory) - in progress by @xiazen

Avoid Silo being MarshalByRefObject but support running tests - #2196

Avoid test hooks being MarshalByRefObject (a few still pending) - #2333

Avoid usages of CallContext - #2197

Run all silo tests that do not use extensibility features (such as external storage providers)

Add storage providers with tests (all implementations that support .net standard out of the box)

Add stream providers with tests (all implementations that support .net standard out of the box)

Extract client implementation from main Orleans.dll (with should have the minimal abstractions)

Migrate off the MSBuild hack for building .NET Standard once new tooling is available

Support codegen in the final tooling

Remove all NETSTANDARD_TODO comments by implementing workarounds

Clean up: Remove all NETSTANDARD comments by moving platform specific components to platform specific DLLs

Design our desired 2.0 nuget package structure (IDs and contents)

Restructure vNext projects to recreate our expected 2.0 nuget packages output structure

Full test set passing on .Net Framework 4.6.2 (net462)

Basic validation tests on .Net Core 1.0 (netcoreapp10)
Note: This list will be updated as new sub-tasks (issues and/or PRs) will emerge from this work.

OR-1 #comment working in progress #resolve