IGNITE-1628 .NET: Compile and run on Mono
authorPavel Tupitsyn <ptupitsyn@apache.org>
Tue, 16 Jan 2018 07:45:13 +0000 (10:45 +0300)
committerPavel Tupitsyn <ptupitsyn@apache.org>
Tue, 16 Jan 2018 07:45:13 +0000 (10:45 +0300)
This closes #3380

12 files changed:
modules/platforms/dotnet/Apache.Ignite.Core.Tests/Apache.Ignite.Core.Tests.csproj
modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheForkedTest.cs
modules/platforms/dotnet/Apache.Ignite.Core.Tests/ExecutableTest.cs
modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteStartStopTest.cs
modules/platforms/dotnet/Apache.Ignite.Core.Tests/Services/ServiceProxyTest.cs
modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestRunner.cs
modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj
modules/platforms/dotnet/Apache.Ignite.EntityFramework.Tests/Apache.Ignite.EntityFramework.Tests.csproj
modules/platforms/dotnet/Apache.Ignite.sln
modules/platforms/dotnet/DEVNOTES.txt
modules/platforms/dotnet/build-mono.sh [new file with mode: 0644]
modules/platforms/dotnet/build.sh

index d3b9fa2..6d6e014 100644 (file)
       <HintPath>..\packages\NUnit.Runners.2.6.3\tools\nunit.framework.dll</HintPath>
     </Reference>
     <Reference Include="System" />
-    <Reference Include="System.configuration" />
+    <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
     <Reference Include="System.Data" />
     <Reference Include="System.Runtime.Serialization" />
     <Reference Include="System.ServiceProcess" />
     <Reference Include="System.Transactions" />
-    <Reference Include="System.XML" />
+    <Reference Include="System.Xml" />
     <Reference Include="System.Xml.Linq" />
   </ItemGroup>
   <ItemGroup>
       <Project>{5b571661-17f4-4f29-8c7d-0edb38ca9b55}</Project>
       <Name>Apache.Ignite.Linq</Name>
     </ProjectReference>
-    <ProjectReference Include="..\Apache.Ignite.log4net\Apache.Ignite.Log4Net.csproj">
+    <ProjectReference Include="..\Apache.Ignite.Log4Net\Apache.Ignite.Log4Net.csproj">
       <Project>{6F82D669-382E-4435-8092-68C4440146D8}</Project>
       <Name>Apache.Ignite.Log4Net</Name>
     </ProjectReference>
       <Project>{27F7F3C6-BDDE-43A9-B565-856F8395A04B}</Project>
       <Name>Apache.Ignite</Name>
     </ProjectReference>
-    <ProjectReference Include="..\Examples\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj">
+    <ProjectReference Include="..\examples\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj">
       <Project>{dfb08363-202e-412d-8812-349ef10a8702}</Project>
       <Name>Apache.Ignite.ExamplesDll</Name>
       <Aliases>ExamplesDll</Aliases>
     </ProjectReference>
-    <ProjectReference Include="..\Examples\Apache.Ignite.Examples\Apache.Ignite.Examples.csproj">
+    <ProjectReference Include="..\examples\Apache.Ignite.Examples\Apache.Ignite.Examples.csproj">
       <Project>{069fa680-3c4d-43a9-b84f-e67513b87827}</Project>
       <Name>Apache.Ignite.Examples</Name>
     </ProjectReference>
     <Compile Include="TestUtils.Windows.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup Condition="'$(Platform)' != 'AnyCPU'">
-    <PostBuildEvent>copy /Y $(SolutionDir)Apache.Ignite\bin\$(PlatformName)\$(ConfigurationName)\Apache.Ignite.exe $(ProjectDir)$(OutDir)
-copy /Y $(SolutionDir)Apache.Ignite\bin\$(PlatformName)\$(ConfigurationName)\Apache.Ignite.exe.config $(ProjectDir)$(OutDir)</PostBuildEvent>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
-    <PostBuildEvent>copy /Y $(SolutionDir)Apache.Ignite\bin\$(ConfigurationName)\Apache.Ignite.exe $(ProjectDir)$(OutDir)
-copy /Y $(SolutionDir)Apache.Ignite\bin\$(ConfigurationName)\Apache.Ignite.exe.config $(ProjectDir)$(OutDir)</PostBuildEvent>
-  </PropertyGroup>
+  
+  <Target Name="AfterBuild">
+    <Copy SourceFiles="$(SolutionDir)Apache.Ignite\bin\$(ConfigurationName)\Apache.Ignite.exe;$(SolutionDir)Apache.Ignite\bin\$(ConfigurationName)\Apache.Ignite.exe.config" DestinationFolder="$(ProjectDir)$(OutDir)" SkipUnchangedFiles="false" />
+  </Target>
+
+  
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
index 0dc214f..254ef30 100644 (file)
@@ -47,6 +47,7 @@ namespace Apache.Ignite.Core.Tests.Cache
                 "-J-Xmx512m",
                 "-J-DIGNITE_QUIET=false"
                 );
+            Assert.IsTrue(proc.Alive);
 
             _grid = Ignition.Start(new IgniteConfiguration(TestUtils.GetTestConfiguration())
             {
index b885d28..0ba0de6 100644 (file)
@@ -103,6 +103,7 @@ namespace Apache.Ignite.Core.Tests
                 "-jvmClasspath=" + TestUtils.CreateTestClasspath()
                 );
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var cfg = RemoteConfig();
@@ -130,6 +131,7 @@ namespace Apache.Ignite.Core.Tests
                 "-assembly=test-2.dll"
                 );
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var cfg = RemoteConfig();
@@ -150,6 +152,7 @@ namespace Apache.Ignite.Core.Tests
                 "-J-DOPT2"
                 );
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var cfg = RemoteConfig();
@@ -170,6 +173,7 @@ namespace Apache.Ignite.Core.Tests
                 "-J-Xmx607m"
                 );
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var minMem = _grid.GetCluster().ForRemotes().GetCompute().ExecuteJavaTask<long>(MinMemTask, null);
@@ -192,6 +196,7 @@ namespace Apache.Ignite.Core.Tests
                 "-JvmMaxMemoryMB=863"
                 );
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var minMem = _grid.GetCluster().ForRemotes().GetCompute().ExecuteJavaTask<long>(MinMemTask, null);
@@ -215,6 +220,7 @@ namespace Apache.Ignite.Core.Tests
 
             var proc = new IgniteProcess("-jvmClasspath=" + TestUtils.CreateTestClasspath());
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var minMem = _grid.GetCluster().ForRemotes().GetCompute().ExecuteJavaTask<long>(MinMemTask, null);
@@ -232,6 +238,7 @@ namespace Apache.Ignite.Core.Tests
             proc = new IgniteProcess("-jvmClasspath=" + TestUtils.CreateTestClasspath(),
                 "-J-Xms605m", "-J-Xmx706m");
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             minMem = _grid.GetCluster().ForRemotes().GetCompute().ExecuteJavaTask<long>(MinMemTask, null);
@@ -256,6 +263,7 @@ namespace Apache.Ignite.Core.Tests
                 "-JvmMaxMemoryMB=256"
                 );
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             // Raw JVM options (Xms/Xmx) should override custom options
@@ -276,6 +284,7 @@ namespace Apache.Ignite.Core.Tests
 
             var proc = new IgniteProcess("-jvmClasspath=" + TestUtils.CreateTestClasspath());
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var remoteCfg = RemoteConfig();
@@ -295,6 +304,7 @@ namespace Apache.Ignite.Core.Tests
             var proc = new IgniteProcess("-jvmClasspath=" + TestUtils.CreateTestClasspath(),
                 "-configFileName=config\\ignite-dotnet-cfg.xml");
 
+            Assert.IsTrue(proc.Alive);
             Assert.IsTrue(_grid.WaitTopology(2));
 
             var remoteCfg = RemoteConfig();
index aa292ab..43afb7a 100644 (file)
@@ -337,6 +337,8 @@ namespace Apache.Ignite.Core.Tests
                 "-jvmClasspath=" + TestUtils.CreateTestClasspath(),
                 "-springConfigUrl=" + Path.GetFullPath(cfg.SpringConfigUrl),
                 "-J-Xms512m", "-J-Xmx512m");
+            
+            Assert.IsTrue(proc.Alive);
 
             var cts = new CancellationTokenSource();
             var token = cts.Token;
index 133ffdf..6146146 100644 (file)
@@ -134,9 +134,6 @@ namespace Apache.Ignite.Core.Tests.Services
             prx.VoidMethod(10);
             Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
 
-            prx.VoidMethod(10, "string");
-            Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
-
             prx.VoidMethod(10, "string", "arg");
             Assert.AreEqual(_svc.InvokeResult, prx.InvokeResult);
 
@@ -154,7 +151,6 @@ namespace Apache.Ignite.Core.Tests.Services
 
             Assert.AreEqual("ObjectMethod", prx.ObjectMethod());
             Assert.AreEqual("ObjectMethod987", prx.ObjectMethod(987));
-            Assert.AreEqual("ObjectMethod987str123", prx.ObjectMethod(987, "str123"));
             Assert.AreEqual("ObjectMethod987str123TestClass", prx.ObjectMethod(987, "str123", new TestClass()));
             Assert.AreEqual("ObjectMethod987str123TestClass34arg5arg6",
                 prx.ObjectMethod(987, "str123", new TestClass(), 3, 4, "arg5", "arg6"));
@@ -411,10 +407,10 @@ namespace Apache.Ignite.Core.Tests.Services
             void VoidMethod(int arg);
 
             /** */
-            void VoidMethod(int arg, string arg1, object arg2 = null);
+            void VoidMethod(int arg, string arg1, object arg2);
 
             /** */
-            void VoidMethod(int arg, string arg1, object arg2 = null, params object[] args);
+            void VoidMethod(int arg, string arg1, object arg2, params object[] args);
 
             /** */
             object ObjectMethod();
@@ -423,10 +419,10 @@ namespace Apache.Ignite.Core.Tests.Services
             object ObjectMethod(int arg);
 
             /** */
-            object ObjectMethod(int arg, string arg1, object arg2 = null);
+            object ObjectMethod(int arg, string arg1, object arg2);
 
             /** */
-            object ObjectMethod(int arg, string arg1, object arg2 = null, params object[] args);
+            object ObjectMethod(int arg, string arg1, object arg2, params object[] args);
 
             /** */
             void ExceptionMethod();
index d67d24b..ab6af60 100644 (file)
 namespace Apache.Ignite.Core.Tests
 {
     using System;
+    using System.Collections.Generic;
     using System.Diagnostics;
     using System.Linq;
     using System.Reflection;
+    using Apache.Ignite.Core.Tests.Binary.Serializable;
+    using Apache.Ignite.Core.Tests.Cache;
+    using Apache.Ignite.Core.Tests.Cache.Query.Linq;
+    using Apache.Ignite.Core.Tests.Client.Cache;
+    using Apache.Ignite.Core.Tests.Compute;
     using Apache.Ignite.Core.Tests.Memory;
     using NUnit.ConsoleRunner;
 
+    /// <summary>
+    /// Console test runner.
+    /// </summary>
     public static class TestRunner
     {
         [STAThread]
@@ -32,6 +41,13 @@ namespace Apache.Ignite.Core.Tests
             Debug.Listeners.Add(new TextWriterTraceListener(Console.Out));
             Debug.AutoFlush = true;
 
+            if (args.Length == 1 && args[0] == "-basicTests")
+            {
+                RunBasicTests();
+                
+                return;
+            }
+
             if (args.Length == 2)
             {
                 //Debugger.Launch();
@@ -45,56 +61,75 @@ namespace Apache.Ignite.Core.Tests
                 return;
             }
 
-            TestOne(typeof(ConsoleRedirectTest), "TestMultipleDomains");
-
-            //TestAll(typeof (AffinityFunctionTest));
-            //TestAllInAssembly();
+            Environment.ExitCode = TestAllInAssembly();
         }
 
-        private static int TestOne(Type testClass, string method)
+        /// <summary>
+        /// Runs some basic tests.
+        /// </summary>
+        private static void RunBasicTests()
         {
-            string[] args =
+            Console.WriteLine(">>> Starting basic tests...");
+
+            var basicTests = new[]
             {
-                "/noshadow",
-                "/run:" + testClass.FullName + "." + method,
-                Assembly.GetAssembly(testClass).Location
+                typeof(ComputeApiTest),
+                typeof(CacheLinqTest),
+                typeof(SqlDmlTest),
+                typeof(LinqTest),
+                typeof(PersistenceTest)
             };
 
-            int returnCode = Runner.Main(args);
+            Environment.ExitCode = TestAll(basicTests, true);
 
-            if (returnCode != 0)
-                Console.Beep();
-
-            return returnCode;
+            Console.WriteLine(">>> Test run finished.");
         }
 
-        private static void TestAll(Type testClass)
+        /// <summary>
+        /// Runs specified test method.
+        /// </summary>
+        private static int TestOne(Type testClass, string method, bool sameDomain = false)
         {
             string[] args =
             {
-                "/noshadow",
-                "/run:" + testClass.FullName, Assembly.GetAssembly(testClass).Location
+                "-noshadow",
+                "-domain:" + (sameDomain ? "None" : "Single"),
+                "-run:" + testClass.FullName + "." + method,
+                Assembly.GetAssembly(testClass).Location
             };
 
-            int returnCode = Runner.Main(args);
+            return Runner.Main(args);
+        }
 
-            if (returnCode != 0)
-                Console.Beep();
+        /// <summary>
+        /// Runs all tests in specified class.
+        /// </summary>
+        private static int TestAll(IEnumerable<Type> testClass, bool sameDomain = false)
+        {
+            var args = new List<string>
+            {
+                "-noshadow",
+                "-domain:" + (sameDomain ? "None" : "Single"),
+                "-run:" + string.Join(",", testClass.Select(x => x.FullName)),
+                Assembly.GetAssembly(typeof(TestRunner)).Location
+            };
+            
+            return Runner.Main(args.ToArray());
         }
 
-        private static void TestAllInAssembly()
+        /// <summary>
+        /// Runs all tests in assembly.
+        /// </summary>
+        private static int TestAllInAssembly(bool sameDomain = false)
         {
             string[] args =
             {
-                "/noshadow",
+                "-noshadow",
+                "-domain:" + (sameDomain ? "None" : "Single"),
                 Assembly.GetAssembly(typeof(InteropMemoryTest)).Location
             };
 
-            int returnCode = Runner.Main(args);
-
-            if (returnCode != 0)
-                Console.Beep();
+            return Runner.Main(args);
         }
-
     }
 }
\ No newline at end of file
index 9a6aeb9..f9b22fc 100644 (file)
     <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <PlatformTarget>x64</PlatformTarget>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <DefineConstants>DEBUG;CODE_ANALYSIS</DefineConstants>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <DocumentationFile>bin\x64\Debug\Apache.Ignite.Core.XML</DocumentationFile>
-    <RunCodeAnalysis>false</RunCodeAnalysis>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <PlatformTarget>x64</PlatformTarget>
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <Optimize>true</Optimize>
-    <DocumentationFile>bin\x64\Release\Apache.Ignite.Core.XML</DocumentationFile>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <PlatformTarget>x86</PlatformTarget>
-    <OutputPath>bin\x86\Debug\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <DefineConstants>DEBUG;CODE_ANALYSIS</DefineConstants>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <DocumentationFile>bin\x86\Debug\Apache.Ignite.Core.XML</DocumentationFile>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <PlatformTarget>x86</PlatformTarget>
-    <OutputPath>bin\x86\Release\</OutputPath>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <Optimize>true</Optimize>
-    <DocumentationFile>bin\x86\Release\Apache.Ignite.Core.XML</DocumentationFile>
-    <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
-    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-  </PropertyGroup>
   <PropertyGroup>
     <SignAssembly>true</SignAssembly>
   </PropertyGroup>
@@ -67,7 +26,6 @@
     <OutputPath>bin\Debug\</OutputPath>
     <DefineConstants>CODE_ANALYSIS;DEBUG</DefineConstants>
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <DocumentationFile>bin\Debug\Apache.Ignite.Core.XML</DocumentationFile>
     <PlatformTarget>AnyCPU</PlatformTarget>
     <RunCodeAnalysis>false</RunCodeAnalysis>
     <CodeAnalysisRuleSet>Apache.Ignite.Core.ruleset</CodeAnalysisRuleSet>
@@ -86,7 +44,7 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
-    <Reference Include="System.configuration" />
+    <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
     <Reference Include="System.Transactions" />
     <Reference Include="System.Xml" />
     <Compile Include="Common\IgniteFutureCancelledException.cs" />
     <Compile Include="Common\IgniteGuid.cs" />
     <Compile Include="Common\Package-Info.cs" />
-    <Compile Include="Impl\Binary\IO\IBinaryStreamProcessor.cs" />
+    <Compile Include="Impl\Binary\Io\IBinaryStreamProcessor.cs" />
     <Compile Include="Impl\Binary\Metadata\BinaryField.cs" />
     <Compile Include="Impl\Binary\SerializableSerializer.cs" />
     <Compile Include="Impl\Binary\BinaryWriterExtensions.cs" />
     <Compile Include="Impl\Messaging\MessageListenerHolder.cs" />
     <Compile Include="Impl\Messaging\Messaging.cs" />
     <Compile Include="Impl\MemoryInfo.cs" />
-    <Compile Include="Impl\Binary\IO\IBinaryStream.cs" />
-    <Compile Include="Impl\Binary\IO\BinaryHeapStream.cs" />
+    <Compile Include="Impl\Binary\Io\IBinaryStream.cs" />
+    <Compile Include="Impl\Binary\Io\BinaryHeapStream.cs" />
     <Compile Include="Impl\Binary\IBinaryTypeDescriptor.cs" />
     <Compile Include="Impl\Binary\IBinaryWriteAware.cs" />
     <Compile Include="Impl\Binary\Metadata\IBinaryTypeHandler.cs" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
        Other similar extension points exist, see Microsoft.Common.targets.
   <Target Name="BeforeBuild">
+       <Message Text="MSBuildBinPath = $(MSBuildBinPath)" />
   </Target>
   <Target Name="AfterBuild">
   </Target>
index b03d5f0..63959ea 100644 (file)
     </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PostBuildEvent>
-               if not exist "$(TargetDir)x86" md "$(TargetDir)x86"
-               xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*" "$(TargetDir)x86"
-               if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64"
-               xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64"
-       </PostBuildEvent>
-  </PropertyGroup>
+  
+  <ItemGroup>  
+    <SqlCeFiles_x86 Include="$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\x86\*.*">
+         <InProject>false</InProject>
+       </SqlCeFiles_x86>
+    <SqlCeFiles_amd64 Include="$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*">
+         <InProject>false</InProject>
+       </SqlCeFiles_amd64>
+  </ItemGroup>  
+       
+  <Target Name="AfterBuild">
+    <Copy SourceFiles="@(SqlCeFiles_x86)" DestinationFolder="$(TargetDir)x86" SkipUnchangedFiles="true" />
+    <Copy SourceFiles="@(SqlCeFiles_amd64)" DestinationFolder="$(TargetDir)amd64" SkipUnchangedFiles="true" />
+  </Target>  
 </Project>
\ No newline at end of file
index 1ca7b14..86f14e4 100644 (file)
@@ -9,13 +9,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Core.Tests.Te
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite", "Apache.Ignite\Apache.Ignite.csproj", "{27F7F3C6-BDDE-43A9-B565-856F8395A04B}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Examples", "Examples\Apache.Ignite.Examples\Apache.Ignite.Examples.csproj", "{069FA680-3C4D-43A9-B84F-E67513B87827}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Examples", "examples\Apache.Ignite.Examples\Apache.Ignite.Examples.csproj", "{069FA680-3C4D-43A9-B84F-E67513B87827}"
        ProjectSection(ProjectDependencies) = postProject
                {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6} = {4CD2F726-7E2B-46C4-A5BA-057BB82EECB6}
                {5B571661-17F4-4F29-8C7D-0EDB38CA9B55} = {5B571661-17F4-4F29-8C7D-0EDB38CA9B55}
        EndProjectSection
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.ExamplesDll", "Examples\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj", "{DFB08363-202E-412D-8812-349EF10A8702}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.ExamplesDll", "examples\Apache.Ignite.ExamplesDll\Apache.Ignite.ExamplesDll.csproj", "{DFB08363-202E-412D-8812-349EF10A8702}"
        ProjectSection(ProjectDependencies) = postProject
                {27F7F3C6-BDDE-43A9-B565-856F8395A04B} = {27F7F3C6-BDDE-43A9-B565-856F8395A04B}
        EndProjectSection
@@ -43,7 +43,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.NLog", "Apach
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.AspNet.Tests", "Apache.Ignite.AspNet.Tests\Apache.Ignite.AspNet.Tests.csproj", "{18EA4C71-A11D-4AB1-8042-418F7559D84F}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Log4Net", "Apache.Ignite.log4net\Apache.Ignite.Log4Net.csproj", "{6F82D669-382E-4435-8092-68C4440146D8}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.Log4Net", "Apache.Ignite.Log4Net\Apache.Ignite.Log4Net.csproj", "{6F82D669-382E-4435-8092-68C4440146D8}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apache.Ignite.EntityFramework", "Apache.Ignite.EntityFramework\Apache.Ignite.EntityFramework.csproj", "{C558518A-C1A0-4224-AAA9-A8688474B4DC}"
 EndProject
index 30ba924..0726c46 100644 (file)
@@ -3,7 +3,7 @@ Apache Ignite.NET Build Instructions (Windows)
 
 Requirements:
 * Windows (XP and up), Windows Server (2008 and up)
-* Oracle JDK 7 and above
+* Oracle JDK 8 and above
 * .NET Framework 4.0
 * PowerShell 3.0+
 * Visual Studio 2010+
@@ -14,8 +14,11 @@ Building binaries:
   build.bat -skipCodeAnalysis
 Resulting binaries will be in bin folder, and NuGet packages in nupkg folder.
 
-Running built binaries: resulting "bin" folder in self contained, you can copy it anywhere and run
+Running built binaries: resulting "bin" folder is self contained, you can copy it anywhere and run
   bin\Apache.Ignite.exe  
+  
+Running examples and Apache.Ignite.exe from project directories:
+  Set IGNITE_NATIVE_TEST_CLASSPATH environment variable to "true"
 
 
 Cross-Platform Support
@@ -29,17 +32,17 @@ from .NET Core 2.0 projects. So we release binaries which target .NET 4.0, and t
 both with .NET 4.0+ and .NET Core 2.0+.
   
 
-Cross-Platform Development (Linux, macOS)
+Cross-Platform Development with .NET Core (Linux, macOS)
 ========================================
 
-Ignite.NET can be built, developed, and tested on Linux and macOS, but only partially.
+Ignite.NET can be built, developed, and tested with .NET Core on Linux and macOS, but only partially.
 A subset of functionality and tests is available. See Apache.Ignite.DotNetCore.sln.
 
 Requirements:
-* .NET Core SDK: https://www.microsoft.com/net/download/linux
-* JDK: sudo apt-get install default-jdk
+* .NET Core SDK (2.1.4+): https://www.microsoft.com/net/download/linux
+* JDK 8+: sudo apt-get install default-jdk
 * Maven: sudo apt-get install maven
-* IDE: Not required. Rider is recommended.
+* IDE: Not required. Rider is recommended. VSCode works, but has issues with tests.
 
 Getting started:
 * Build Java and .NET:
@@ -49,4 +52,23 @@ Getting started:
   dotnet test
 * Run specific test:
   dotnet test --filter CacheTest
-* IDE: Open Apache.Ignite.DotNetCore.sln
\ No newline at end of file
+* IDE: Open Apache.Ignite.DotNetCore.sln
+
+
+Cross-Platform Development with Mono (Linux, macOS)
+========================================
+
+Full Ignite.NET solution can be built, developed, and tested with Mono.
+
+Requirements:
+* Mono: http://www.mono-project.com/download/
+* NuGet: sudo apt-get install nuget
+* JDK: sudo apt-get install default-jdk
+* Maven: sudo apt-get install maven
+* IDE: Not required. Rider is recommended, MonoDevelop also works.
+
+Getting started:
+* Build Java and .NET:
+  ./build-mono.sh
+* Run tests: 
+  mono Apache.Ignite.Core.Tests/bin/Debug/Apache.Ignite.Core.Tests.exe -basicTests
diff --git a/modules/platforms/dotnet/build-mono.sh b/modules/platforms/dotnet/build-mono.sh
new file mode 100644 (file)
index 0000000..6f73eb7
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+#
+# 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.
+#
+
+#
+# Builds Java and .NET with Mono
+#
+
+pushd .
+cd ../../..
+mvn clean package -DskipTests -Dmaven.javadoc.skip=true -Plgpl,-examples,-clean-libs,-release,-scala,-clientDocs
+popd
+
+nuget restore Apache.Ignite.sln
+msbuild Apache.Ignite.sln /p:RunCodeAnalysis=false
index 65d81d5..fc5b344 100755 (executable)
@@ -17,7 +17,7 @@
 #
 
 #
-# Builds Java and .NET
+# Builds Java and .NET with .NET Core
 #
 
 pushd .