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("{CB4CE8C6-1BDB-4DC7-A4D3-65A1999772F8}") = "ConsoleApp", "Tutorials\ConsoleApp\vb\src\ConsoleApp.vbdproj", "{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}"
	ProjectSection(ProjectDependencies) = postProject
	EndProjectSection
EndProject
Global
	GlobalSection(SolutionConfiguration) = preSolution
		Debug = Debug
		Release = Release
	EndGlobalSection
	GlobalSection(ProjectConfiguration) = postSolution
		{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}.Debug.ActiveCfg = Debug|Windows CE
		{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}.Debug.Build.0 = Debug|Windows CE
		{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}.Debug.Deploy.0 = Debug|Windows CE
		{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}.Release.ActiveCfg = Release|Windows CE
		{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}.Release.Build.0 = Release|Windows CE
		{E923C49B-5C5F-49A3-AFE1-7DDB2EC31757}.Release.Deploy.0 = Release|Windows CE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
	EndGlobalSection
	GlobalSection(ExtensibilityAddIns) = postSolution
	EndGlobalSection
EndGlobal
