Directory.Build.targets: Added FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION and FEATURE_ARGITERATOR and implemented in Lucene.Net.Util.SystemConsole class
diff --git a/Directory.Build.targets b/Directory.Build.targets
index 36489df..4f4c042 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -19,6 +19,14 @@
 
 -->
 <Project>
+
+  <!-- Features in .NET Core 3.x and .NET 5 only -->
+  <PropertyGroup Condition=" $(TargetFramework.StartsWith('netcoreapp')) Or '$(TargetFramework)' == 'net5.0' ">
+
+    <DefineConstants>$(DefineConstants);FEATURE_ARGITERATOR</DefineConstants>
+
+  </PropertyGroup>
+  
   <!-- Features in .NET Standard and .NET Core only (no .NET Framework support) -->
   <PropertyGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp')) ">
     
@@ -74,12 +82,19 @@
 
   <!-- Features in .NET Framework 4.6+ only -->
   <PropertyGroup Condition="$(TargetFramework.StartsWith('net46')) Or $(TargetFramework.StartsWith('net47')) Or $(TargetFramework.StartsWith('net48'))">
+    
     <DefineConstants>$(DefineConstants);FEATURE_ARRAYEMPTY</DefineConstants>
+
   </PropertyGroup>
 
+  <!-- Features in .NET Framework 4.5+ -->
   <PropertyGroup Condition="$(TargetFramework.StartsWith('net4'))">
     
+    <DefineConstants>$(DefineConstants);FEATURE_ARGITERATOR</DefineConstants>
     <DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE_EXCEPTIONS</DefineConstants>
+    <!-- Although HostProtectionAttribute is available in .NET Standard 2.0+ via platform extensions, we are excluding
+         it due to the fact it is not a primary feature of Lucene.NET -->
+    <DefineConstants>$(DefineConstants);FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION</DefineConstants>
     
     <DebugType>full</DebugType>
   </PropertyGroup>
diff --git a/src/Lucene.Net/Support/Util/SystemConsole.cs b/src/Lucene.Net/Support/Util/SystemConsole.cs
index 07b6e32..9a31936 100644
--- a/src/Lucene.Net/Support/Util/SystemConsole.cs
+++ b/src/Lucene.Net/Support/Util/SystemConsole.cs
@@ -1,7 +1,7 @@
 using System;
 using System.IO;
 using System.Runtime.CompilerServices;
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
 using System.Security.Permissions;
 #endif
 
@@ -37,7 +37,7 @@
         public static TextReader In { get; set; } = Console.In;
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(bool value)
@@ -46,7 +46,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(char value)
@@ -55,7 +55,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(char[] buffer)
@@ -64,7 +64,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(decimal value)
@@ -73,7 +73,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(double value)
@@ -82,7 +82,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(int value)
@@ -91,7 +91,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(long value)
@@ -100,7 +100,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(object value)
@@ -109,7 +109,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(float value)
@@ -118,7 +118,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(string value)
@@ -127,7 +127,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining), CLSCompliant(false)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(uint value)
@@ -136,7 +136,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining), CLSCompliant(false)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(ulong value)
@@ -145,7 +145,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(string format, object arg0)
@@ -154,7 +154,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(string format, params object[] arg)
@@ -170,7 +170,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(char[] buffer, int index, int count)
@@ -179,7 +179,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(string format, object arg0, object arg1)
@@ -188,7 +188,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void Write(string format, object arg0, object arg1, object arg2)
@@ -196,9 +196,11 @@
             Out.Write(format, arg0, arg1, arg2);
         }
 
-#if !NETSTANDARD
+#if FEATURE_ARGITERATOR
         [MethodImpl(MethodImplOptions.NoInlining), CLSCompliant(false)]
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
+#endif
         public static void Write(string format, object arg0, object arg1, object arg2, object arg3, __arglist)
         {
             ArgIterator iterator = new ArgIterator(__arglist);
@@ -217,7 +219,7 @@
 #endif
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine()
@@ -226,7 +228,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(bool value)
@@ -235,7 +237,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(char value)
@@ -244,7 +246,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(char[] buffer)
@@ -253,7 +255,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(decimal value)
@@ -262,7 +264,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(double value)
@@ -271,7 +273,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(int value)
@@ -280,7 +282,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(long value)
@@ -289,7 +291,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(object value)
@@ -298,7 +300,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(float value)
@@ -307,7 +309,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(string value)
@@ -316,7 +318,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining), CLSCompliant(false)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(uint value)
@@ -325,7 +327,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining), CLSCompliant(false)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(ulong value)
@@ -334,7 +336,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(string format, object arg0)
@@ -343,7 +345,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(string format, params object[] arg)
@@ -359,7 +361,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(char[] buffer, int index, int count)
@@ -368,7 +370,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(string format, object arg0, object arg1)
@@ -377,7 +379,7 @@
         }
 
         [MethodImpl(MethodImplOptions.NoInlining)]
-#if !NETSTANDARD
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
 #endif
         public static void WriteLine(string format, object arg0, object arg1, object arg2)
@@ -385,9 +387,11 @@
             Out.WriteLine(format, arg0, arg1, arg2);
         }
 
-#if !NETSTANDARD
+#if FEATURE_ARGITERATOR
         [MethodImpl(MethodImplOptions.NoInlining), CLSCompliant(false)]
+#if FEATURE_SECURITYPERMISSIONS_HOSTPROTECTION
         [HostProtection(SecurityAction.LinkDemand, UI = true)]
+#endif
         public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3, __arglist)
         {
             ArgIterator iterator = new ArgIterator(__arglist);