<?xml version="1.0" encoding="utf-8"?>

<!--
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 ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{C3D005CD-6C26-49FD-A4D8-08699B66AF6F}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>org.apache.juddi.client</RootNamespace>
    <AssemblyName>juddi-dotnet-client</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <RunCodeAnalysis>true</RunCodeAnalysis>
    <DocumentationFile>bin\Debug\juddi-dotnet-client.XML</DocumentationFile>
  </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="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.configuration" />
    <Reference Include="System.Runtime.Serialization" />
    <Reference Include="System.Security" />
    <Reference Include="System.ServiceModel" />
    <Reference Include="System.Web.Services" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="bindings\datamodel-mono.cs" />
    <Compile Include="bindings\events.cs" />
    <Compile Include="bindings\ext.cs" />
    <Compile Include="bindings\JUDDIApiService.cs" />
    <Compile Include="org.apache.juddi.jaxb\PrintJUDDI.cs" />
    <Compile Include="org.apache.juddi.jaxb\PrintUDDI.cs" />
    <Compile Include="org.apache.juddi.v3.client.annotations\AnnotationProcessor.cs" />
    <Compile Include="org.apache.juddi.v3.client.annotations\UDDIService.cs" />
    <Compile Include="org.apache.juddi.v3.client.annotations\UDDIServiceBinding.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\BackgroundRegistration.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\ClientConfig.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\Properties.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\Property.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\TokenResolver.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\uddi-client-ext.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\uddi-client.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\UDDIClerk.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\UDDIKeyConvention.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\UDDINode.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\XmlConfiguration.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\XRegistration.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\AES128Cryptor.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\AES256Cryptor.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\AESCryptor.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\Cryptor.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\CryptorFactory.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\DigSigUtil.cs" />
    <Compile Include="org.apache.juddi.v3.client.cryptor\TripleDESCryptor.cs" />
    <Compile Include="org.apache.juddi.v3.client.ext.wsdm\WSDMQosConstants.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\easyWsdl.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\ServiceRegistrationResponse.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\URLLocalizer.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\wadl.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\WADL2UDDI.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\wsdl.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\WSDL2UDDI.cs" />
    <Compile Include="org.apache.juddi.v3.client.mapping\XMLSchema.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\ISubscriptionCallback.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\RegistrationAbortedException.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\ServiceAlreadyStartedException.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\SubscriptionCallbackListener.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\UDDISubscriptionListenerService.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\UnableToSignException.cs" />
    <Compile Include="org.apache.juddi.v3.client.subscription\UnexpectedResponseException.cs" />
    <Compile Include="org.apache.juddi.v3.client.transport\AspNetTransport.cs" />
    <Compile Include="org.apache.juddi.v3.client.util\TModelInstanceDetailsComparator.cs" />
    <Compile Include="org.apache.juddi.v3.client\ConsoleLogger.cs" />
    <Compile Include="org.apache.juddi.v3.client\EventLogger.cs" />
    <Compile Include="org.apache.juddi.v3.client\FileLogger.cs" />
    <Compile Include="org.apache.juddi.v3.client\Log.cs" />
    <Compile Include="org.apache.juddi.v3.client\LogFactory.cs" />
    <Compile Include="org.apache.juddi.v3.client\LogLevel.cs" />
    <Compile Include="org.apache.juddi.v3.client\Release.cs" />
    <Compile Include="org.apache.juddi.v3.client.transport\Transport.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\UDDIClient.cs" />
    <Compile Include="org.apache.juddi.v3.client.config\UDDIClientContainer.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="bindings\bindings.cs">
      <SubType>Component</SubType>
    </Compile>
    <Compile Include="org.apache.juddi.v3.client\UDDIConstants.cs" />
    <Compile Include="org.apache.juddi.v3.client\UDDIService.cs" />
  </ItemGroup>
  <ItemGroup>
    <WCFMetadata Include="Service References\" />
  </ItemGroup>
  <ItemGroup />
  <Import Project="$(MSBuildToolsPath)\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>
