﻿<?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 Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <OutputType>Library</OutputType>
        <TargetFrameworks>net40;netstandard2.0</TargetFrameworks>
        <RootNamespace>Apache.NMS.Test</RootNamespace>
        <AssemblyName>Apache.NMS.Test</AssemblyName>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)'=='Release'">
        <OutputPath>..\..\build\</OutputPath>
        <AppendTargetFrameworkToOutputPath>true</AppendTargetFrameworkToOutputPath>
    </PropertyGroup>

    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
        <PackageId>Apache.NMS.Test</PackageId>
        <Version>2.0.0</Version>
        <Authors>Apache ActiveMQ</Authors>
        <Company>Apache Software Foundation</Company>
        <Product>Apache NMS API</Product>
        <Description>Apache NMS (.Net Standard Messaging Library) Test Suite</Description>
        <Copyright>Copyright (C) 2005-2021 Apache Software Foundation</Copyright>
        <PackageProjectUrl>https://activemq.apache.org/components/nms/</PackageProjectUrl>
        <PackageLicense>https://github.com/apache/activemq-nms-api/blob/master/LICENSE.txt</PackageLicense>
        <PackageIconUrl>https://activemq.apache.org/assets/img/activemq_logo_icon.png</PackageIconUrl>
        <RepositoryUrl>https://github.com/apache/activemq-nms-api</RepositoryUrl>
        <RepositoryType>git</RepositoryType>
        <PackageTags>apache;activemq;nms;api;net;test;messaging</PackageTags>
        <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
    </PropertyGroup>

    <ItemGroup>
        <None Include="..\..\LICENSE.txt" Pack="true" PackagePath="LICENSE.txt" />
        <None Include="..\..\NOTICE.txt" Pack="true" PackagePath="NOTICE.txt" />
    </ItemGroup>

    <PropertyGroup>
        <SignAssembly>true</SignAssembly>
        <AssemblyOriginatorKeyFile>..\..\keyfile\NMSKey.snk</AssemblyOriginatorKeyFile>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="NUnit" Version="3.12.0" />
        <PackageReference Include="NUnit.Console" Version="3.10.0" />
        <PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
    </ItemGroup>

    <ItemGroup Condition=" '$(TargetFramework)' == 'net40'">
        <Reference Include="System.Web" />
    </ItemGroup>

    <ItemGroup>
        <ProjectReference Include="..\..\src\nms-api\nms-api.csproj" />
    </ItemGroup>
</Project>