Microsoft Visual Studio Solution File, Format Version 8.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("{20D4826A-C6FA-45DB-90F4-C717570B9F32}") = "ConsoleApp", "Tutorials\ConsoleApp\cs\src\ConsoleApp.csdproj", "{06757B10-BBC2-4858-AB65-26F92D0D6A5D}"
	ProjectSection(ProjectDependencies) = postProject
	EndProjectSection
EndProject
Global
	GlobalSection(SolutionConfiguration) = preSolution
		Debug = Debug
		Release = Release
	EndGlobalSection
	GlobalSection(ProjectConfiguration) = postSolution
		{06757B10-BBC2-4858-AB65-26F92D0D6A5D}.Debug.ActiveCfg = Debug|Windows CE
		{06757B10-BBC2-4858-AB65-26F92D0D6A5D}.Debug.Build.0 = Debug|Windows CE
		{06757B10-BBC2-4858-AB65-26F92D0D6A5D}.Debug.Deploy.0 = Debug|Windows CE
		{06757B10-BBC2-4858-AB65-26F92D0D6A5D}.Release.ActiveCfg = Release|Windows CE
		{06757B10-BBC2-4858-AB65-26F92D0D6A5D}.Release.Build.0 = Release|Windows CE
		{06757B10-BBC2-4858-AB65-26F92D0D6A5D}.Release.Deploy.0 = Release|Windows CE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
	EndGlobalSection
	GlobalSection(ExtensibilityAddIns) = postSolution
	EndGlobalSection
EndGlobal
