﻿# 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.

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Usergrid.Sdk.IntegrationTests", "Usergrid.Sdk.IntegrationTests\Usergrid.Sdk.IntegrationTests.csproj", "{0278A0A4-F5E9-41F7-A86E-CD376D3FE5E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Usergrid.Sdk.Tests", "Usergrid.Sdk.Tests\Usergrid.Sdk.Tests.csproj", "{9C25CFBA-1F57-4DF3-B0A1-52D1F90F24E6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Usergrid.Sdk", "Usergrid.Sdk\Usergrid.Sdk.csproj", "{437D108F-528C-4B2A-B399-06CF02DEB08B}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{0278A0A4-F5E9-41F7-A86E-CD376D3FE5E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0278A0A4-F5E9-41F7-A86E-CD376D3FE5E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0278A0A4-F5E9-41F7-A86E-CD376D3FE5E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0278A0A4-F5E9-41F7-A86E-CD376D3FE5E2}.Release|Any CPU.Build.0 = Release|Any CPU
		{437D108F-528C-4B2A-B399-06CF02DEB08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{437D108F-528C-4B2A-B399-06CF02DEB08B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{437D108F-528C-4B2A-B399-06CF02DEB08B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{437D108F-528C-4B2A-B399-06CF02DEB08B}.Release|Any CPU.Build.0 = Release|Any CPU
		{9C25CFBA-1F57-4DF3-B0A1-52D1F90F24E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{9C25CFBA-1F57-4DF3-B0A1-52D1F90F24E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{9C25CFBA-1F57-4DF3-B0A1-52D1F90F24E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{9C25CFBA-1F57-4DF3-B0A1-52D1F90F24E6}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(MonoDevelopProperties) = preSolution
		StartupItem = Usergrid.Sdk.IntegrationTests\Usergrid.Sdk.IntegrationTests.csproj
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal
