<!--
 
 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 DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.50727</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{52AC4940-2077-4104-A753-29A9C8C16957}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Apache.Qpid.Client.Transport.Socket.Blocking</RootNamespace>
    <AssemblyName>Apache.Qpid.Client.Transport.Socket.Blocking</AssemblyName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="log4net, Version=1.2.0.30714, Culture=neutral, PublicKeyToken=500ffcafb14f92df">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\Qpid.Common\lib\log4net\log4net.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="BlockingSocketProcessor.cs" />
    <Compile Include="BlockingSocketTransport.cs" />
    <Compile Include="ByteChannel.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Qpid.Buffer\Qpid.Buffer.csproj">
      <Project>{44384DF2-B0A4-4580-BDBC-EE4BAA87D995}</Project>
      <Name>Qpid.Buffer</Name>
    </ProjectReference>
    <ProjectReference Include="..\Qpid.Client\Qpid.Client.csproj">
      <Project>{68987C05-3768-452C-A6FC-6BA1D372852F}</Project>
      <Name>Qpid.Client</Name>
    </ProjectReference>
    <ProjectReference Include="..\Qpid.Common\Qpid.Common.csproj">
      <Project>{77064C42-24D2-4CEB-9EA2-0EF481A43205}</Project>
      <Name>Qpid.Common</Name>
    </ProjectReference>
    <ProjectReference Include="..\Qpid.Messaging\Qpid.Messaging.csproj">
      <Project>{6688F826-C58E-4C1B-AA1F-22AFAB4B7D07}</Project>
      <Name>Qpid.Messaging</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>
