Microsoft Visual Studio Solution File, Format Version 7.00
#
#
# 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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.Ext.Trace", "log4net.Ext.Trace\cs\src\log4net.Ext.Trace.csproj", "{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.Ext.EventID", "log4net.Ext.EventID\cs\src\log4net.Ext.EventID.csproj", "{CB985027-C009-4C0F-88C1-8CF11912EE4C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "log4net.Ext.MarshalByRef", "log4net.Ext.MarshalByRef\cs\src\log4net.Ext.MarshalByRef.csproj", "{CB985027-C009-4C0F-88C1-8CF11912AE4C}"
EndProject
Global
	GlobalSection(DPCodeReviewSolutionGUID) = preSolution
		DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000}
	EndGlobalSection
	GlobalSection(SolutionConfiguration) = preSolution
		ConfigName.0 = Debug
		ConfigName.1 = Release
		ConfigName.2 = ReleaseStrong
	EndGlobalSection
	GlobalSection(ProjectDependencies) = postSolution
	EndGlobalSection
	GlobalSection(ProjectConfiguration) = postSolution
		{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}.Debug.ActiveCfg = Debug|.NET
		{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}.Debug.Build.0 = Debug|.NET
		{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}.Release.ActiveCfg = Release|.NET
		{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}.Release.Build.0 = Release|.NET
		{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}.ReleaseStrong.ActiveCfg = ReleaseStrong|.NET
		{8C73DF1C-AB2B-4309-A3EC-1ED594239E15}.ReleaseStrong.Build.0 = ReleaseStrong|.NET
		{CB985027-C009-4C0F-88C1-8CF11912EE4C}.Debug.ActiveCfg = Debug|.NET
		{CB985027-C009-4C0F-88C1-8CF11912EE4C}.Debug.Build.0 = Debug|.NET
		{CB985027-C009-4C0F-88C1-8CF11912EE4C}.Release.ActiveCfg = Release|.NET
		{CB985027-C009-4C0F-88C1-8CF11912EE4C}.Release.Build.0 = Release|.NET
		{CB985027-C009-4C0F-88C1-8CF11912EE4C}.ReleaseStrong.ActiveCfg = ReleaseStrong|.NET
		{CB985027-C009-4C0F-88C1-8CF11912EE4C}.ReleaseStrong.Build.0 = ReleaseStrong|.NET
		{CB985027-C009-4C0F-88C1-8CF11912AE4C}.Debug.ActiveCfg = Debug|.NET
		{CB985027-C009-4C0F-88C1-8CF11912AE4C}.Debug.Build.0 = Debug|.NET
		{CB985027-C009-4C0F-88C1-8CF11912AE4C}.Release.ActiveCfg = Release|.NET
		{CB985027-C009-4C0F-88C1-8CF11912AE4C}.Release.Build.0 = Release|.NET
		{CB985027-C009-4C0F-88C1-8CF11912AE4C}.ReleaseStrong.ActiveCfg = Release|.NET
		{CB985027-C009-4C0F-88C1-8CF11912AE4C}.ReleaseStrong.Build.0 = Release|.NET
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
	EndGlobalSection
	GlobalSection(ExtensibilityAddIns) = postSolution
	EndGlobalSection
EndGlobal
