You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by dp...@apache.org on 2017/06/22 20:47:54 UTC
[06/10] logging-log4net git commit: Implemented changes for the
Util/AppenderAttachedImpl.cs class for calling log4net appenders in parallel
using .NET Task Parallel Library.
Implemented changes for the Util/AppenderAttachedImpl.cs class for calling log4net appenders in parallel using .NET Task Parallel Library.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4net/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4net/commit/897ef682
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4net/tree/897ef682
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4net/diff/897ef682
Branch: refs/heads/pr/old/40
Commit: 897ef682bebbc44da53812fa4001d0132e80a84a
Parents: 76f0151
Author: Harry Martyrossian <HM...@users.noreply.github.com>
Authored: Fri Dec 30 20:32:41 2016 -0800
Committer: Dominik Psenner <dp...@apache.org>
Committed: Thu Jun 22 22:37:13 2017 +0200
----------------------------------------------------------------------
src/Util/AppenderAttachedImpl.cs | 54 +-
src/Util/ParallelIAppender.cs | 214 ++++++++
src/log4net.vs2015.csproj | 809 +++++++++++++++++++++++++++++
src/log4net.vs2015.sln | 27 +
tests/src/log4net.Tests.vs2015.csproj | 260 +++++++++
5 files changed, 1343 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/897ef682/src/Util/AppenderAttachedImpl.cs
----------------------------------------------------------------------
diff --git a/src/Util/AppenderAttachedImpl.cs b/src/Util/AppenderAttachedImpl.cs
index fafb0b8..9da44c2 100644
--- a/src/Util/AppenderAttachedImpl.cs
+++ b/src/Util/AppenderAttachedImpl.cs
@@ -85,18 +85,20 @@ namespace log4net.Util
m_appenderArray = m_appenderList.ToArray();
}
- foreach(IAppender appender in m_appenderArray)
+ int count = m_appenderArray.Length;
+ for (int i = 0; i < count; ++i)
{
try
{
- appender.DoAppend(loggingEvent);
+ m_appenderArray[i].DoAppend(loggingEvent);
}
catch(Exception ex)
{
- LogLog.Error(declaringType, "Failed to append to appender [" + appender.Name + "]", ex);
+ LogLog.Error(declaringType, "Failed to append to appender [" + m_appenderArray[i].Name + "]", ex);
}
}
- return m_appenderList.Count;
+
+ return count;
}
/// <summary>
@@ -153,9 +155,9 @@ namespace log4net.Util
#endregion Public Instance Methods
- #region Private Static Methods
+ #region Private Static Methods
- /// <summary>
+ /// <summary>
/// Calls the DoAppende method on the <see cref="IAppender"/> with
/// the <see cref="LoggingEvent"/> objects supplied.
/// </summary>
@@ -183,13 +185,13 @@ namespace log4net.Util
appender.DoAppend(loggingEvent);
}
}
- }
+ }
- #endregion
+ #endregion
- #region Implementation of IAppenderAttachable
+ #region Implementation of IAppenderAttachable
- /// <summary>
+ /// <summary>
/// Attaches an appender.
/// </summary>
/// <param name="newAppender">The appender to add.</param>
@@ -211,10 +213,19 @@ namespace log4net.Util
{
m_appenderList = new AppenderCollection(1);
}
+
+#if (NET_4_5 && PARALLEL_APPENDERS)
+ var newParallelIAppender = new ParallelIAppender(newAppender);
+ if (!m_appenderList.Contains(newParallelIAppender))
+ {
+ m_appenderList.Add(newParallelIAppender);
+ }
+#else
if (!m_appenderList.Contains(newAppender))
{
m_appenderList.Add(newAppender);
}
+#endif
}
/// <summary>
@@ -270,7 +281,8 @@ namespace log4net.Util
}
}
}
- return null;
+
+ return null;
}
/// <summary>
@@ -360,17 +372,17 @@ namespace log4net.Util
#endregion Private Instance Fields
- #region Private Static Fields
+ #region Private Static Fields
- /// <summary>
- /// The fully qualified type of the AppenderAttachedImpl class.
- /// </summary>
- /// <remarks>
- /// Used by the internal logger to record the Type of the
- /// log message.
- /// </remarks>
- private readonly static Type declaringType = typeof(AppenderAttachedImpl);
+ /// <summary>
+ /// The fully qualified type of the AppenderAttachedImpl class.
+ /// </summary>
+ /// <remarks>
+ /// Used by the internal logger to record the Type of the
+ /// log message.
+ /// </remarks>
+ private readonly static Type declaringType = typeof(AppenderAttachedImpl);
- #endregion Private Static Fields
+ #endregion Private Static Fields
}
}
http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/897ef682/src/Util/ParallelIAppender.cs
----------------------------------------------------------------------
diff --git a/src/Util/ParallelIAppender.cs b/src/Util/ParallelIAppender.cs
new file mode 100644
index 0000000..81b3860
--- /dev/null
+++ b/src/Util/ParallelIAppender.cs
@@ -0,0 +1,214 @@
+#region Apache License
+//
+// 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.
+//
+#endregion
+
+#if (NET_4_5 && PARALLEL_APPENDERS)
+
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using log4net.Appender;
+using log4net.Core;
+
+namespace log4net.Util
+{
+ /// <summary>
+ /// This class allows AppenderAttachedImpl class to call appenders in "parallel".
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// By implementing <see cref="IAppender"/> interface
+ /// allows AppenderAttacedImpl to call appenders in "parallel".
+ /// That allows to mitigate performance impedance between appenders and
+ /// provides better overall performance.
+ /// </para>
+ /// </remarks>
+ /// <author>Harry Martyrossian</author>
+ public class ParallelIAppender : IAppender
+ {
+ private static readonly Type declaringType = typeof(ParallelIAppender);
+ private IAppender appender;
+ private object synchObject = new object();
+ private PulseCode pulseCode = PulseCode.NotSignaled;
+ private Queue<LoggingEvent> events = new Queue<LoggingEvent>();
+ private LoggingEvent[] arrayOfEvents;
+ private Task appenderTask;
+
+ #region Public Instance Constructors
+ /// <summary>
+ /// Constructor
+ /// </summary>
+ /// <remarks>
+ /// <para>
+ /// Initializes a new instance of the <see cref="ParallelIAppender"/> class.
+ /// </para>
+ /// </remarks>
+ public ParallelIAppender(IAppender appender)
+ {
+ this.appender = appender;
+ this.appenderTask = Task.Run(() => this.Append());
+ }
+ #endregion Public Instance Constructors
+
+ [Flags]
+ internal enum PulseCode : int
+ {
+ NotSignaled,
+ QueueIsNotEmpty,
+ ExitThread
+ }
+
+ #region Override implementation of Object
+ /// <summary>
+ /// Determines whether two <see cref="ParallelIAppender" /> instances
+ /// are equal.
+ /// </summary>
+ /// <param name="obj">The <see cref="object" /> to compare with the current <see cref="ParallelIAppender" />.</param>
+ /// <returns>
+ /// <c>true</c> if the specified <see cref="object" /> is equal to the current <see cref="ParallelIAppender" />; otherwise, <c>false</c>.
+ /// </returns>
+ /// <remarks>
+ /// <para>
+ /// Compares the implementations of <see cref="IAppender" /> interface.
+ /// </para>
+ /// </remarks>
+ public override bool Equals(object obj)
+ {
+ return this.Equals(obj as ParallelIAppender);
+ }
+
+ /// <summary>
+ /// Compares implementations of IAppender interface.
+ /// </summary>
+ /// <param name="obj">The object to compare against.</param>
+ /// <returns><c>true</c> if the objects are equal.</returns>
+ /// <remarks>
+ /// <para>
+ /// Compares implementations of <see cref="IAppender" /> interface, and
+ /// defers to base class if the target object is not a <see cref="ParallelIAppender" />
+ /// instance.
+ /// </para>
+ /// </remarks>
+ public virtual bool Equals(ParallelIAppender obj)
+ {
+ if (obj == null)
+ {
+ return false;
+ }
+ return this.appender.Equals(obj);
+ }
+
+ /// <summary>
+ /// Returns a hash code
+ /// </summary>
+ /// <returns>A hash code for the current implementation of the <see cref="IAppender" /> interface.</returns>
+ /// <remarks>
+ /// <para>
+ /// Returns a hash code suitable for use in hashing algorithms and data
+ /// structures like a hash table.
+ /// </para>
+ /// <para>
+ /// Returns the hash code of the <see cref="IAppender"/> interface implementation.
+ /// </para>
+ /// </remarks>
+ public override int GetHashCode()
+ {
+ return this.appender.GetHashCode();
+ }
+ #endregion Override implementation of Object
+
+ #region Implementation of IAppender
+ string IAppender.Name
+ {
+ get
+ {
+ return this.appender.Name;
+ }
+ set
+ {
+ this.appender.Name = value;
+ }
+ }
+
+ void IAppender.Close()
+ {
+ lock (this.synchObject)
+ {
+ this.pulseCode |= PulseCode.ExitThread;
+ Monitor.Pulse(this.synchObject);
+ }
+ this.appenderTask.Wait();
+ this.appender.Close();
+ }
+
+ void IAppender.DoAppend(LoggingEvent loggingEvent)
+ {
+ lock (this.synchObject)
+ {
+ this.events.Enqueue(loggingEvent);
+ this.pulseCode |= PulseCode.QueueIsNotEmpty;
+ Monitor.Pulse(this.synchObject);
+ }
+ }
+ #endregion Implementation of IAppender
+
+ private void Append()
+ {
+ bool keepRunning = true;
+ do
+ {
+ lock (this.synchObject)
+ {
+ if (this.pulseCode == PulseCode.NotSignaled)
+ {
+ Monitor.Wait(this.synchObject);
+ }
+ if ((this.pulseCode & PulseCode.QueueIsNotEmpty) == PulseCode.QueueIsNotEmpty)
+ {
+ this.pulseCode ^= PulseCode.QueueIsNotEmpty;
+ }
+ if ((this.pulseCode & PulseCode.ExitThread) == PulseCode.ExitThread)
+ {
+ this.pulseCode ^= PulseCode.ExitThread;
+ keepRunning = false;
+ }
+ this.CopyEvents();
+ }
+ this.CallDoAppend();
+ }
+ while (keepRunning);
+ }
+
+ private void CopyEvents()
+ {
+ this.arrayOfEvents = this.events.ToArray();
+ this.events.Clear();
+ }
+
+ private void CallDoAppend()
+ {
+ var length = this.arrayOfEvents.Length;
+ for (int i = 0; i < length; ++i)
+ {
+ this.appender.DoAppend(this.arrayOfEvents[i]);
+ }
+ }
+ }
+}
+#endif
http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/897ef682/src/log4net.vs2015.csproj
----------------------------------------------------------------------
diff --git a/src/log4net.vs2015.csproj b/src/log4net.vs2015.csproj
new file mode 100644
index 0000000..9594046
--- /dev/null
+++ b/src/log4net.vs2015.csproj
@@ -0,0 +1,809 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
+ <PropertyGroup>
+ <ProjectType>Local</ProjectType>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{181FE707-E161-4722-9F38-6AAAB6FAA106}</ProjectGuid>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ApplicationIcon>
+ </ApplicationIcon>
+ <AssemblyKeyContainerName>
+ </AssemblyKeyContainerName>
+ <AssemblyName>log4net</AssemblyName>
+ <AssemblyOriginatorKeyFile>
+ </AssemblyOriginatorKeyFile>
+ <DefaultClientScript>JScript</DefaultClientScript>
+ <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
+ <DefaultTargetSchema>IE50</DefaultTargetSchema>
+ <DelaySign>false</DelaySign>
+ <OutputType>Library</OutputType>
+ <RootNamespace>log4net</RootNamespace>
+ <StartupObject>
+ </StartupObject>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <OutputPath>..\build\bin\net\4.5\debug\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+ <DefineConstants>TRACE;DEBUG;NET;NET_2_0;NET_4_0;NET_4_5;PARALLEL_APPENDERS;</DefineConstants>
+ <DocumentationFile>log4net.xml</DocumentationFile>
+ <DebugSymbols>true</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>false</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>full</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>SecurityRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <OutputPath>..\build\bin\net\4.5\release\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+ <DefineConstants>TRACE;STRONG;NET;NET_2_0;NET_4_0;NET_4_5;PARALLEL_APPENDERS;</DefineConstants>
+ <DocumentationFile>log4net.xml</DocumentationFile>
+ <DebugSymbols>false</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>true</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>none</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System">
+ <Name>System</Name>
+ </Reference>
+ <Reference Include="System.configuration" />
+ <Reference Include="System.Data">
+ <Name>System.Data</Name>
+ </Reference>
+ <Reference Include="System.Web">
+ <Name>System.Web</Name>
+ </Reference>
+ <Reference Include="System.Xml">
+ <Name>System.XML</Name>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Appender\AdoNetAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AnsiColorTerminalAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AppenderCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AppenderSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AspNetTraceAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\BufferingAppenderSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\BufferingForwardingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ColoredConsoleAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ConsoleAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\DebugAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\EventLogAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\FileAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ForwardingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\IAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\IBulkAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\IFlushable.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\LocalSyslogAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\ManagedColoredConsoleAppender.cs" />
+ <Compile Include="Appender\MemoryAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\NetSendAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\OutputDebugStringAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RemoteSyslogAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RemotingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RollingFileAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\SmtpAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\SmtpPickupDirAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TelnetAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TextWriterAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TraceAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\UdpAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="AssemblyVersionInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\AliasDomainAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\AliasRepositoryAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\BasicConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\ConfiguratorAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\DomainAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\DOMConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\DOMConfiguratorAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\Log4NetConfigurationSectionHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\PluginAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\RepositoryAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\SecurityContextProviderAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\XmlConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Config\XmlConfiguratorAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\CompactRepositorySelector.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\DefaultRepositorySelector.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ErrorCode.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ExceptionEvaluator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IAppenderAttachable.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IErrorHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IFixingRequired.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ILogger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ILoggerWrapper.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IOptionHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\IRepositorySelector.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ITriggeringEventEvaluator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\Level.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LevelCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LevelEvaluator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LevelMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LocationInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LogException.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LoggerManager.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LoggerWrapperImpl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LoggingEvent.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\LogImpl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\MethodItem.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\SecurityContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\SecurityContextProvider.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\StackFrameItem.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\TimeEvaluator.cs" />
+ <Compile Include="Core\WrapperMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\AbsoluteTimeDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\DateTimeDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\IDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\Iso8601DateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="DateFormatter\SimpleDateFormatter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\DenyAllFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\FilterDecision.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\FilterSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\IFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\LevelMatchFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\LevelRangeFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\LoggerMatchFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\MdcFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\NdcFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\PropertyFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Filter\StringMatchFilter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="GlobalContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ILog.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\DynamicPatternLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\ExceptionLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\ILayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\IRawLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Layout2RawLayoutAdapter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\LayoutSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\PatternLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AppDomainPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetCachePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetContextPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetRequestPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\AspNetSessionPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\DatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\ExceptionPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\FileLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\FullLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\IdentityPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\LevelPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\LineLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\LoggerPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\MessagePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\MethodLocationPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\NamedPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\NdcPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\PatternLayoutConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\PropertyPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\RelativeTimePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\StackTraceDetailPatternConverter.cs" />
+ <Compile Include="Layout\Pattern\StackTracePatternConverter.cs" />
+ <Compile Include="Layout\Pattern\ThreadPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\TypeNamePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\UserNamePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\Pattern\UtcDatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawLayoutConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawPropertyLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawTimeStampLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\RawUtcTimeStampLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\SimpleLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayout.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayoutBase.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayoutSchemaLog4j.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="LogicalThreadContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="LogManager.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="MDC.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="NDC.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ObjectRenderer\DefaultRenderer.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ObjectRenderer\IObjectRenderer.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ObjectRenderer\RendererMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\IPlugin.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\IPluginFactory.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\PluginCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\PluginMap.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\PluginSkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Plugin\RemoteLoggingServerPlugin.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\ConfigurationChangedEventArgs.cs" />
+ <Compile Include="Repository\Hierarchy\DefaultLoggerFactory.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\Hierarchy.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\ILoggerFactory.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\Logger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\LoggerKey.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\ProvisionNode.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\RootLogger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\Hierarchy\XmlHierarchyConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\IBasicRepositoryConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\ILoggerRepository.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\IXmlRepositoryConfigurator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Repository\LoggerRepositorySkeleton.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="ThreadContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\AppenderAttachedImpl.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\CompositeProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ContextPropertiesBase.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ConverterInfo.cs" />
+ <Compile Include="Util\CountingQuietTextWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\CyclicBuffer.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\EmptyCollection.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\EmptyDictionary.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\FormattingInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\GlobalContextProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ILogExtensions.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LevelMapping.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LevelMappingEntry.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogicalThreadContextProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogLog.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NativeError.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NullDictionaryEnumerator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NullEnumerator.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\NullSecurityContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\OnlyOnceErrorHandler.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\OptionConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ParallelIAppender.cs" />
+ <Compile Include="Util\PatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternParser.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternString.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\AppDomainPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\AppSettingPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\DatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\EnvironmentFolderPathPatternConverter.cs" />
+ <Compile Include="Util\PatternStringConverters\EnvironmentPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\IdentityPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\LiteralPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\NewLinePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\ProcessIdPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\PropertyPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\RandomStringPatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\UserNamePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PatternStringConverters\UtcDatePatternConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PropertiesDictionary.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\PropertyEntry.cs" />
+ <Compile Include="Util\ProtectCloseTextWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\QuietTextWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ReaderWriterLock.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ReadOnlyPropertiesDictionary.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ReusableStringWriter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\SystemInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\SystemStringFormat.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TextWriterAdapter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ThreadContextProperties.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogicalThreadContextStack.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ThreadContextStack.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\LogicalThreadContextStacks.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\ThreadContextStacks.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\Transform.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\BooleanConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\ConversionNotSupportedException.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\ConverterRegistry.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\EncodingConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\IConvertFrom.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\IConvertTo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\IPAddressConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\PatternLayoutConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\PatternStringConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\TypeConverter.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TypeConverters\TypeConverterAttribute.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\WindowsSecurityContext.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PreBuildEvent>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/897ef682/src/log4net.vs2015.sln
----------------------------------------------------------------------
diff --git a/src/log4net.vs2015.sln b/src/log4net.vs2015.sln
new file mode 100644
index 0000000..2612780
--- /dev/null
+++ b/src/log4net.vs2015.sln
@@ -0,0 +1,27 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.Tests.vs2015", "..\tests\src\log4net.Tests.vs2015.csproj", "{B0530F10-0238-49A9-93B0-8EF412E90BCF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.vs2015", "log4net.vs2015.csproj", "{181FE707-E161-4722-9F38-6AAAB6FAA106}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0530F10-0238-49A9-93B0-8EF412E90BCF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {181FE707-E161-4722-9F38-6AAAB6FAA106}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
http://git-wip-us.apache.org/repos/asf/logging-log4net/blob/897ef682/tests/src/log4net.Tests.vs2015.csproj
----------------------------------------------------------------------
diff --git a/tests/src/log4net.Tests.vs2015.csproj b/tests/src/log4net.Tests.vs2015.csproj
new file mode 100644
index 0000000..89cd253
--- /dev/null
+++ b/tests/src/log4net.Tests.vs2015.csproj
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
+ <PropertyGroup>
+ <ProjectType>Local</ProjectType>
+ <ProductVersion>9.0.30729</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{B0530F10-0238-49A9-93B0-8EF412E90BCF}</ProjectGuid>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ApplicationIcon>
+ </ApplicationIcon>
+ <AssemblyKeyContainerName>
+ </AssemblyKeyContainerName>
+ <AssemblyName>log4net.Tests</AssemblyName>
+ <AssemblyOriginatorKeyFile>
+ </AssemblyOriginatorKeyFile>
+ <DefaultClientScript>JScript</DefaultClientScript>
+ <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
+ <DefaultTargetSchema>IE50</DefaultTargetSchema>
+ <DelaySign>false</DelaySign>
+ <OutputType>Library</OutputType>
+ <RootNamespace>log4net.Tests</RootNamespace>
+ <StartupObject>
+ </StartupObject>
+ <FileUpgradeFlags>
+ </FileUpgradeFlags>
+ <UpgradeBackupLocation>
+ </UpgradeBackupLocation>
+ <OldToolsVersion>3.5</OldToolsVersion>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <OutputPath>..\bin\Debug\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+ <DefineConstants>TRACE;DEBUG;NET;NET_2_0;NET_4_0;NET_4_5;</DefineConstants>
+ <DocumentationFile>
+ </DocumentationFile>
+ <DebugSymbols>true</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>false</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>full</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <OutputPath>..\bin\Release\</OutputPath>
+ <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+ <BaseAddress>285212672</BaseAddress>
+ <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+ <ConfigurationOverrideFile>
+ </ConfigurationOverrideFile>
+ <DefineConstants>TRACE;NET;NET_2_0;NET_4_0;NET_4_5</DefineConstants>
+ <DocumentationFile>
+ </DocumentationFile>
+ <DebugSymbols>false</DebugSymbols>
+ <FileAlignment>4096</FileAlignment>
+ <Optimize>true</Optimize>
+ <RegisterForComInterop>false</RegisterForComInterop>
+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
+ <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+ <WarningLevel>4</WarningLevel>
+ <DebugType>none</DebugType>
+ <ErrorReport>prompt</ErrorReport>
+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
+ <HintPath>..\..\src\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="System">
+ <Name>System</Name>
+ </Reference>
+ <Reference Include="System.configuration" />
+ <Reference Include="System.Core">
+ <RequiredTargetFramework>3.5</RequiredTargetFramework>
+ </Reference>
+ <Reference Include="System.Data">
+ <Name>System.Data</Name>
+ </Reference>
+ <Reference Include="System.Runtime.Remoting">
+ <Name>System.Runtime.Remoting</Name>
+ </Reference>
+ <Reference Include="System.Xml">
+ <Name>System.XML</Name>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\..\src\AssemblyVersionInfo.cs">
+ <Link>AssemblyVersionInfo.cs</Link>
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\AdoNetAppenderTest.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetCommand.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetConnection.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetParameter.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetParameterCollection.cs" />
+ <Compile Include="Appender\AdoNet\Log4NetTransaction.cs" />
+ <Compile Include="Appender\AppenderCollectionTest.cs" />
+ <Compile Include="Appender\BufferingAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\CountingAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\EventLogAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\MemoryAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RemotingAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\SmtpPickupDirAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\RollingFileAppenderTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\StringAppender.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Appender\TraceAppenderTest.cs" />
+ <Compile Include="AssemblyInfo.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Context\LogicalThreadContextTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Context\ThreadContextTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\EvaluatorTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\FixingTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\ShutdownTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Core\StringFormatTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Hierarchy\Hierarchy.cs" />
+ <Compile Include="Hierarchy\Logger.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\DynamicPatternLayoutTest.cs" />
+ <Compile Include="Layout\PatternLayoutTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Layout\XmlLayoutTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="LoggerRepository\ConfigurationMessages.cs" />
+ <Compile Include="Filter\FilterTest.cs" />
+ <Compile Include="Utils.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\CyclicBufferTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\EnvironmentPatternConverterTest.cs" />
+ <Compile Include="Util\LogLogTest.cs" />
+ <Compile Include="Util\PatternConverterTest.cs" />
+ <Compile Include="Util\PatternStringTest.cs" />
+ <Compile Include="Util\PropertiesDictionaryTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\RandomStringPatternConverterTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\SystemInfoTest.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ <Compile Include="Util\TransformTest.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Windows Installer 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\src\log4net.vs2012.csproj">
+ <Project>{181fe707-e161-4722-9f38-6aaab6faa106}</Project>
+ <Name>log4net.vs2012</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <PropertyGroup>
+ <PreBuildEvent>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ </PostBuildEvent>
+ </PropertyGroup>
+</Project>
\ No newline at end of file