<!--
 - Licensed 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>
    <TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
    <Version>2.5.0</Version>
    <FileVersion>$(Version)</FileVersion>
    <Company>Apache Software Foundation</Company>
    <Copyright>$(Company)</Copyright>
    <Title>Apache.ShenYu.Client</Title>
    <PackageTags>Apache;Shenyu</PackageTags>
    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
    <PackageReleaseNotes>Please refer to CHANGELOG.md for details</PackageReleaseNotes>
    <Description>.NET client library for Apache ShenYu</Description>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <RepositoryUrl>https://github.com/apache/incubator-shenyu-client-dotnet</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <PublishRepositoryUrl>true</PublishRepositoryUrl>
    <IncludeSymbols>true</IncludeSymbols>
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
    <!-- add more documents for future -->
    <NoWarn>CS1591</NoWarn>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="Registers\" />
    <None Remove="Models\" />
    <None Remove="Models\DTO\" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Registers\" />
    <Folder Include="Models\" />
    <Folder Include="Models\DTO\" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="2.2.0" />
    <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
    <PackageReference Include="ZooKeeperNetEx" Version="3.4.12.4" />
  </ItemGroup>
</Project>
