1. Dominik P
  2. log4net-patches

Commits

Dominik P  committed 70f24a4

Added some simple unit tests to test the functionality of the CronRollingCondition

  • Participants
  • Parent commits eef86b5
  • Branches default

Comments (0)

Files changed (1)

File RFA-NG

View file
 # HG changeset patch
-# Parent 5a5078efc63aebd4e047af51bbbe4286376db5c2
+# Parent f50b41656da118cabce2d4b46e541e5d2459d485
 A RFA-NG implementation that cleans up a few things
 
-diff -r 5a5078efc63a src/Appender/RollingFileAppenderNG.cs
+diff -r f50b41656da1 src/Appender/Rolling/CronRollingCondition.cs
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/Appender/RollingFileAppenderNG.cs	Wed Sep 21 22:50:10 2011 +0200
++++ b/src/Appender/Rolling/CronRollingCondition.cs	Fri Sep 23 22:31:43 2011 +0200
+@@ -0,0 +1,222 @@
++#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
++
++using System;
++using System.IO;
++
++namespace log4net.Appender.Rolling
++{
++	/// <summary>
++	/// A implementation of the <see cref="IRollingCondition"/> interface that rolls
++	/// the file cronologically.
++	/// </summary>
++	/// <author>Dominik Psenner</author>
++	public class CronRollingCondition : IRollingCondition
++	{
++		#region Public Instance Constructors
++
++		public CronRollingCondition()
++			: this("*", "*", "*", "*", "*")
++		{
++		}
++
++		public CronRollingCondition(string dow, string month, string day, string hour, string minute)
++		{
++			Dow = TryParse(dow);
++			Month = TryParse(month);
++			Day = TryParse(day);
++			Hour = TryParse(hour);
++			Minute = TryParse(minute);
++		}
++
++		#endregion
++
++		#region Protected Instance Properties
++
++		protected Tuple<int?, MatchType> Dow { get; private set; }
++		protected Tuple<int?, MatchType> Month { get; private set; }
++		protected Tuple<int?, MatchType> Day { get; private set; }
++		protected Tuple<int?, MatchType> Hour { get; private set; }
++		protected Tuple<int?, MatchType> Minute { get; private set; }
++
++		#endregion
++
++		#region Private Instance Properties
++
++		private ulong last_rolled = 0;
++
++		#endregion
++
++		#region Protected Inner Classes
++
++		protected enum MatchType
++		{
++			Nothing,
++			Exact,
++			Remainder,
++		}
++
++		#endregion
++
++		#region Protected Static Methods
++
++		/// <summary>
++		/// This method parses a string to match any of these:
++		/// i
++		/// *
++		/// */i
++		/// </summary>
++		/// <param name="input"></param>
++		/// <returns></returns>
++		static protected Tuple<int?, MatchType> TryParse(string input)
++		{
++			// trim input and strip empty spaces
++			string inputParsed = input.Trim().Replace(" ", "").Replace("\t", "");
++
++			// match a remainder: */c
++			if (inputParsed.StartsWith("*/") || inputParsed.StartsWith(@"*\"))
++			{
++				// strip first two chars
++				inputParsed = inputParsed.Substring(2);
++				// parse the remainder
++				int i = -1;
++				if (int.TryParse(inputParsed, out i))
++				{
++					return Tuple.Create<int?, MatchType>(i, MatchType.Remainder);
++				}
++			}
++			else if (inputParsed.StartsWith("*")) // match anything: *
++			{
++				return Tuple.Create<int?, MatchType>(null, MatchType.Nothing);
++			}
++			else // match one specific numer: i
++			{
++				int i = -1;
++				if (int.TryParse(inputParsed, out i))
++				{
++					return Tuple.Create<int?, MatchType>(i, MatchType.Exact);
++				}
++			}
++
++			// throw exception by default
++			throw new FormatException(string.Format("The input string '{0}' could not be parsed to a valid format.", input));
++		}
++
++		#endregion
++
++		#region Implementation of IRollingCondition
++
++		public bool IsMet(string file)
++		{
++			return IsMet(DateTime.Now);
++		}
++
++		private static uint GetUniqueIndex(DateTime now)
++		{
++			uint result = (uint)now.DayOfWeek;
++			result <<= 3;
++			result += (uint)now.Month;
++			result <<= 4;
++			result += (uint)now.Day;
++			result <<= 5;
++			result += (uint)now.Hour;
++			result <<= 5;
++			result += (uint)now.Minute;
++			return result;
++		}
++
++		#endregion
++
++		#region Private Methods
++
++		public bool IsMet(DateTime now)
++		{
++			Console.WriteLine("test {0}", now);
++			// check only every minute
++			// we can skip the check as we checked this minute already 
++			// and if we don't we may run into the situation to roll a file twice
++			if (GetUniqueIndex(now) == last_rolled)
++			{
++				Console.WriteLine("  skipped");
++				return false;
++			}
++			if (!IsMet(Dow, (int)now.DayOfWeek))
++			{
++				return false;
++			}
++			if (!IsMet(Month, now.Month))
++			{
++				return false;
++			}
++			if (!IsMet(Day, now.Day))
++			{
++				return false;
++			}
++			if (!IsMet(Hour, now.Hour))
++			{
++				return false;
++			}
++			if (!IsMet(Minute, now.Minute))
++			{
++				return false;
++			}
++
++			last_rolled = GetUniqueIndex(now);
++			return true;
++		}
++
++		private bool IsMet(Tuple<int?, MatchType> match, int item)
++		{
++			switch (match.Item2)
++			{
++				case MatchType.Exact:
++					Console.WriteLine("  {0} != {1} == {2}", match.Item1.Value, item, match.Item1.Value != item);
++					if (match.Item1.Value != item)
++					{
++						return false;
++					}
++					break;
++				case MatchType.Remainder:
++					// special case: */0, the division through 0 is undefined; this match should pass
++					if (match.Item1.Value == 0)
++					{
++						Console.WriteLine(  "{0} % 0 == 0", item);
++						return false;
++					}
++					else
++					{
++						Console.WriteLine("  {0} % {1} == {2}", item, match.Item1.Value, item % match.Item1.Value);
++						if (item % match.Item1.Value != 0)
++						{
++							return false;
++						}
++					}
++					break;
++			}
++			return true;
++		}
++
++		#endregion
++
++		public override string ToString()
++		{
++			return string.Format("{0} {1} {2} {3} {4}", Dow, Month, Day, Hour, Minute);
++		}
++	}
++}
+diff -r f50b41656da1 src/Appender/Rolling/IRollingCondition.cs
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/src/Appender/Rolling/IRollingCondition.cs	Fri Sep 23 22:31:43 2011 +0200
+@@ -0,0 +1,38 @@
++#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
++
++using System;
++
++namespace log4net.Appender.Rolling
++{
++	/// <summary>
++	/// The interface definition of a rolling condition.
++	/// </summary>
++	/// <author>Dominik Psenner</author>
++	public interface IRollingCondition
++	{
++		/// <summary>
++		/// This method should implement all checks needed to determine if a file
++		/// can be rolled based on the conditions it implies to the file.
++		/// </summary>
++		/// <param name="file">the file to be rolled</param>
++		/// <returns>true when the file has met all conditions to be rolled</returns>
++		bool IsMet(string file);
++	}
++}
+diff -r f50b41656da1 src/Appender/Rolling/IRollingStrategy.cs
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/src/Appender/Rolling/IRollingStrategy.cs	Fri Sep 23 22:31:43 2011 +0200
+@@ -0,0 +1,32 @@
++#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
++
++using System;
++
++namespace log4net.Appender.Rolling
++{
++	public interface IRollingStrategy
++	{
++		/// <summary>
++		/// This method should implement all the rolling operations.
++		/// </summary>
++		/// <param name="file">the file to be rolled</param>
++		void Roll(string file);
++	}
++}
+diff -r f50b41656da1 src/Appender/Rolling/IndexRollingStrategy.cs
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/src/Appender/Rolling/IndexRollingStrategy.cs	Fri Sep 23 22:31:43 2011 +0200
+@@ -0,0 +1,77 @@
++#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
++
++using System;
++using System.IO;
++
++namespace log4net.Appender.Rolling
++{
++	/// <summary>
++	/// This is a simple rolling strategy implementation that rolls a file by
++	/// appending the index 0. If a file exists that is named exactly as that
++	/// that file will be renamed to index 1 until reaching the maximum index.
++	/// The last file will be removed.
++	/// </summary>
++	/// <author>Dominik Psenner</author>
++	public class IndexRollingStrategy : IRollingStrategy
++	{
++		#region Implementation of IRollingStrategy
++
++		/// <summary>
++		/// This method rolls a file with backup indexes between
++		/// [0..10].
++		/// </summary>
++		/// <param name="file"></param>
++		public void Roll(string file)
++		{
++			DoRoll(file, file, 0, 10);
++		}
++
++		#endregion
++
++		#region Private Methods
++
++		private void DoRoll(string baseFilename, string currentFilename, int currentIndex, int maxIndex)
++		{
++			if (currentIndex > maxIndex)
++			{
++				if (File.Exists(currentFilename))
++				{
++					File.Delete(currentFilename);
++				}
++				return;
++			}
++			if (!File.Exists(currentFilename))
++			{
++				return;
++			}
++
++			// determine next filename
++			string nextFilename = string.Format("{0}.{1}", baseFilename, currentIndex);
++
++			// iterate the process until we meet the end
++			DoRoll(baseFilename, nextFilename, currentIndex + 1, maxIndex);
++
++			// rename this file now that there's free room after us
++			File.Move(currentFilename, nextFilename);
++		}
++
++		#endregion
++	}
++}
+diff -r f50b41656da1 src/Appender/RollingFileAppenderNG.cs
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/src/Appender/RollingFileAppenderNG.cs	Fri Sep 23 22:31:43 2011 +0200
 @@ -0,0 +1,143 @@
 +#region Apache License
 +//
 +
 +using log4net.Util;
 +using log4net.Core;
-+using log4net.Appender.RollingFileAppenderNGAPI;
++using log4net.Appender.Rolling;
 +
 +namespace log4net.Appender
 +{
 +		#endregion
 +	}
 +}
-diff -r 5a5078efc63a src/Appender/RollingFileAppenderNGAPI/CronRollingCondition.cs
+diff -r f50b41656da1 src/log4net.vs2010.csproj
+--- a/src/log4net.vs2010.csproj	Fri Sep 23 14:54:29 2011 +0000
++++ b/src/log4net.vs2010.csproj	Fri Sep 23 22:31:43 2011 +0200
+@@ -1,4 +1,4 @@
+-<?xml version="1.0" encoding="utf-8"?>
++<?xml version="1.0" encoding="utf-8"?>
+ <!--
+ 
+  Licensed to the Apache Software Foundation (ASF) under one
+@@ -18,766 +18,773 @@
+  specific language governing permissions and limitations
+  under the License.
+ 
+--->
+-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.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.0</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\2.0\debug\</OutputPath>
+-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+-    <BaseAddress>285212672</BaseAddress>
+-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+-    <ConfigurationOverrideFile>
+-    </ConfigurationOverrideFile>
+-    <DefineConstants>TRACE;DEBUG;NET;NET_2_0;NET_4_0</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\1.0\release\</OutputPath>
+-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
+-    <BaseAddress>285212672</BaseAddress>
+-    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
+-    <ConfigurationOverrideFile>
+-    </ConfigurationOverrideFile>
+-    <DefineConstants>TRACE;STRONG;NET;NET_1_0;</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\LocalSyslogAppender.cs">
+-      <SubType>Code</SubType>
+-    </Compile>
+-    <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\SecurityContext.cs">
+-      <SubType>Code</SubType>
+-    </Compile>
+-    <Compile Include="Core\SecurityContextProvider.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\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\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\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\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\ThreadContextStack.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 DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.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.0</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\2.0\debug\</OutputPath>
++    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
++    <BaseAddress>285212672</BaseAddress>
++    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
++    <ConfigurationOverrideFile>
++    </ConfigurationOverrideFile>
++    <DefineConstants>TRACE;DEBUG;NET;NET_2_0;NET_4_0</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\1.0\release\</OutputPath>
++    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
++    <BaseAddress>285212672</BaseAddress>
++    <CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
++    <ConfigurationOverrideFile>
++    </ConfigurationOverrideFile>
++    <DefineConstants>TRACE;STRONG;NET;NET_1_0;</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\LocalSyslogAppender.cs">
++      <SubType>Code</SubType>
++    </Compile>
++    <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\RollingFileAppenderNG.cs">
++      <SubType>Code</SubType>
++    </Compile>
++    <Compile Include="Appender\Rolling\CronRollingCondition.cs" />
++    <Compile Include="Appender\Rolling\IndexRollingStrategy.cs" />
++    <Compile Include="Appender\Rolling\IRollingCondition.cs" />
++    <Compile Include="Appender\Rolling\IRollingStrategy.cs" />
++    <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\SecurityContext.cs">
++      <SubType>Code</SubType>
++    </Compile>
++    <Compile Include="Core\SecurityContextProvider.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\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\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\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\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\ThreadContextStack.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
+diff -r f50b41656da1 tests/src/Appender/Rolling/CronRollingConditionTest.cs
 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/Appender/RollingFileAppenderNGAPI/CronRollingCondition.cs	Wed Sep 21 22:50:10 2011 +0200
-@@ -0,0 +1,198 @@
-+#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
++++ b/tests/src/Appender/Rolling/CronRollingConditionTest.cs	Fri Sep 23 22:31:43 2011 +0200
+@@ -0,0 +1,45 @@
++using System;
++using System.Collections.Generic;
++using System.Linq;
++using System.Text;
++using NUnit.Framework;
++using log4net.Appender.Rolling;
 +
-+using System;
-+using System.IO;
-+
-+namespace log4net.Appender.RollingFileAppenderNGAPI
++namespace log4net.Tests.Appender.Rolling
 +{
-+	/// <summary>
-+	/// A implementation of the <see cref="IRollingCondition"/> interface that rolls
-+	/// the file cronologically.
-+	/// </summary>
-+	/// <author>Dominik Psenner</author>
-+	public class CronRollingCondition : IRollingCondition
++	[TestFixture]
++	public class CronRollingConditionTest
 +	{
-+		#region Public Instance Constructors
-+
-+		public CronRollingCondition()
-+			: this("*", "*", "*", "*", "*")
++		[Test]
++		public void IsMetTest()
 +		{
-+		}
-+
-+		public CronRollingCondition(string dow, string month, string day, string hour, string minute)
-+		{
-+			Dow = TryParse(dow);
-+			Month = TryParse(month);
-+			Day = TryParse(day);
-+			Hour = TryParse(hour);
-+			Minute = TryParse(minute);
-+		}
-+
-+		#endregion
-+
-+		#region Protected Instance Properties
-+
-+		protected Tuple<int?, MatchType> Dow { get; private set; }
-+		protected Tuple<int?, MatchType> Month { get; private set; }
-+		protected Tuple<int?, MatchType> Day { get; private set; }
-+		protected Tuple<int?, MatchType> Hour { get; private set; }
-+		protected Tuple<int?, MatchType> Minute { get; private set; }
-+
-+		#endregion
-+
-+		#region Private Instance Properties
-+
-+		private ulong last_rolled = 0;
-+
-+		#endregion
-+
-+		#region Protected Inner Classes
-+
-+		protected enum MatchType
-+		{
-+			Nothing,
-+			Exact,
-+			Remainder,
-+		}
-+
-+		#endregion
-+
-+		#region Protected Static Methods
-+
-+		/// <summary>
-+		/// This method parses a string to match any of these:
-+		/// i
-+		/// *
-+		/// */i
-+		/// </summary>
-+		/// <param name="input"></param>
-+		/// <returns></returns>
-+		static protected Tuple<int?, MatchType> TryParse(string input)
-+		{
-+			// trim input and strip empty spaces
-+			string inputParsed = input.Trim().Replace(" ", "").Replace("\t", "");
-+
-+			// match anything: *
-+			if (inputParsed == "*")
++			Tuple<CronRollingCondition, Tuple<DateTime, bool>[]>[] tests = new Tuple<CronRollingCondition,Tuple<DateTime,bool>[]>[]{
++				Tuple.Create(new CronRollingCondition("*", "*", "*", "*", "5"), new Tuple<DateTime, bool>[]{
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 5, 0), true),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 5, 1), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 6, 0), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 10, 0), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 13, 5, 1), true),
++					Tuple.Create(new DateTime(2009, 10, 10, 14, 5, 1), true),
++				}),
++				Tuple.Create(new CronRollingCondition("*", "*", "*", "*", "*/3"), new Tuple<DateTime, bool>[]{
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 0, 0), true),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 0, 1), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 0, 59), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 3, 0), true),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 3, 59), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 4, 1), false),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 6, 33), true),
++					Tuple.Create(new DateTime(2009, 10, 10, 12, 10, 0), false),
++				}),
++			};
++			foreach (Tuple<CronRollingCondition, Tuple<DateTime, bool>[]> test in tests)
 +			{
-+				return Tuple.Create<int?, MatchType>(null, MatchType.Nothing);
-+			}
-+			// match a remainder: */c
-+			if (inputParsed.StartsWith("*/") || inputParsed.StartsWith(@"*\"))
-+			{
-+				// strip first two chars
-+				inputParsed = inputParsed.Substring(2);
-+				// parse the remainder
-+				int i = -1;
-+				if (int.TryParse(inputParsed, out i))
++				foreach (Tuple<DateTime, bool> testCheck in test.Item2)
 +				{
-+					return Tuple.Create<int?, MatchType>(i, MatchType.Remainder);
++					Assert.AreEqual(test.Item1.IsMet(testCheck.Item1), testCheck.Item2, string.Format("failed for {0} with condition {1}", testCheck.Item1, test.Item1));
 +				}
 +			}
-+			else // match one specific numer: i
-+			{
-+				int i = -1;
-+				if (int.TryParse(inputParsed, out i))
-+				{
-+					return Tuple.Create<int?, MatchType>(i, MatchType.Exact);
-+				}
-+			}
-+
-+			// throw exception by default
-+			throw new FormatException(string.Format("The input string '{0}' could not be parsed to a valid format.", input));
 +		}
-+
-+		#endregion
-+
-+		#region Implementation of IRollingCondition
-+
-+		public bool IsMet(string file)
-+		{
-+			DateTime now = DateTime.Now;
-+
-+			// check only every minute
-+			// we can skip the check as we checked this minute already 
-+			// and if we don't we may run into the situation to roll a file twice
-+			if (GetUniqueIndex(now) == last_rolled)
-+			{
-+				return false;
-+			}
-+			if (!IsMet(Dow, (int)now.DayOfWeek))
-+			{
-+				return false;
-+			}
-+			if (!IsMet(Month, now.Month))
-+			{
-+				return false;
-+			}
-+			if (!IsMet(Day, now.Day))
-+			{
-+				return false;
-+			}
-+			if (!IsMet(Hour, now.Hour))
-+			{
-+				return false;
-+			}
-+			if (!IsMet(Minute, now.Minute))
-+			{
-+				return false;
-+			}
-+
-+			last_rolled = GetUniqueIndex(now);
-+			return true;
-+		}
-+
-+		private static uint GetUniqueIndex(DateTime now)
-+		{
-+			return (uint)now.DayOfWeek * (uint)now.Month * (uint)now.Day * (uint)now.Hour * (uint)now.Minute;
-+		}
-+
-+		#endregion
-+
-+		#region Private Methods
-+
-+		private bool IsMet(Tuple<int?, MatchType> match, int item)
-+		{
-+			switch (match.Item2)
-+			{
-+				case MatchType.Exact:
-+					if (match.Item1.Value != item)
-+					{
-+						return false;
-+					}
-+					break;
-+				case MatchType.Remainder:
-+					// special case: */0, the division through 0 is undefined; this match should pass
-+					if (match.Item1.Value == 0)
-+					{
-+						return true;
-+					}
-+					else if (item % match.Item1.Value != 0)
-+					{
-+						return false;
-+					}
-+					break;
-+			}
-+			return true;
-+		}
-+
-+		#endregion
 +	}
 +}
-diff -r 5a5078efc63a src/Appender/RollingFileAppenderNGAPI/IRollingCondition.cs
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/Appender/RollingFileAppenderNGAPI/IRollingCondition.cs	Wed Sep 21 22:50:10 2011 +0200
-@@ -0,0 +1,38 @@
-+#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
-+
-+using System;
-+
-+namespace log4net.Appender.RollingFileAppenderNGAPI
-+{
-+	/// <summary>
-+	/// The interface definition of a rolling condition.
-+	/// </summary>
-+	/// <author>Dominik Psenner</author>
-+	public interface IRollingCondition
-+	{
-+		/// <summary>
-+		/// This method should implement all checks needed to determine if a file
-+		/// can be rolled based on the conditions it implies to the file.
-+		/// </summary>
-+		/// <param name="file">the file to be rolled</param>
-+		/// <returns>true when the file has met all conditions to be rolled</returns>
-+		bool IsMet(string file);
-+	}
-+}
-diff -r 5a5078efc63a src/Appender/RollingFileAppenderNGAPI/IRollingStrategy.cs
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/Appender/RollingFileAppenderNGAPI/IRollingStrategy.cs	Wed Sep 21 22:50:10 2011 +0200
-@@ -0,0 +1,32 @@
-+#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
-+
-+using System;
-+
-+namespace log4net.Appender.RollingFileAppenderNGAPI
-+{
-+	public interface IRollingStrategy
-+	{
-+		/// <summary>
-+		/// This method should implement all the rolling operations.
-+		/// </summary>
-+		/// <param name="file">the file to be rolled</param>
-+		void Roll(string file);
-+	}
-+}
-diff -r 5a5078efc63a src/Appender/RollingFileAppenderNGAPI/IndexRollingStrategy.cs
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/src/Appender/RollingFileAppenderNGAPI/IndexRollingStrategy.cs	Wed Sep 21 22:50:10 2011 +0200
-@@ -0,0 +1,77 @@
-+#region Apache License
-+//
-+// Licensed to the Apache Software Foundation (ASF) under one or more 
-+// contributor license agreements. See the NOTICE file distributed with