// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements.  See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License.  You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
= Cross-Platform Support

== Overview

Starting with version 2.4, Ignite.NET supports .NET Core. It is possible to run .NET nodes and develop Ignite.NET
applications for Linux and macOS, as well as Windows.

== .NET Core

*Requirements:*

* https://www.microsoft.com/net/download/[.NET Core SDK 2.0+, window=_blank]
* http://www.oracle.com/technetwork/java/javase/downloads/index.html[Java 11+, window=_blank] (macOS requires JDK, otherwise JRE works)

*Running Examples*
https://ignite.apache.org/download.cgi#binaries[Binary distribution, window=_blank] includes .NET Core examples:

* Download https://ignite.apache.org/download.cgi#binaries[binary distribution, window=_blank] from the Ignite website and extract into any directory.
* `cd platforms/dotnet/examples/dotnetcore`
* `dotnet run`

== Java Detection

Ignite.NET looks for a Java installation directory in the following places:

* `HKLM\Software\JavaSoft\Java Runtime Environment` (Windows)
* `/usr/bin/java` (Linux)
* `/Library/Java/JavaVirtualMachines` (macOS)

If you changed the default location of Java, then specify the actual path using one of the methods below:

* Set the `IgniteConfiguration.JvmDllPath` property
* or set the `JAVA_HOME` environment variable

== Known Issues

*Serializing delegates is not supported on this platform*

.NET Core does not support delegate serialization, `System.MulticastDelegate.GetObjectData`
just https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/MulticastDelegate.cs#L52[throws an exception, window=_blank],
so Ignite.NET can not serialize delegates or objects containing them.

*Could not load file or assembly 'System.Configuration.ConfigurationManager'*

Known https://github.com/dotnet/standard/issues/506[.NET issue (506), window=_blank], in some cases additional package reference is required:

* `dotnet add package System.Configuration.ConfigurationManager`
