<!--
   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

       https://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">

  <Import Project="../../../../common.props" />

  <PropertyGroup>
    <TargetFrameworks>$(DefaultLibraryTargetFrameworks)</TargetFrameworks>
    <AssemblyName>Avro.File.Zstandard</AssemblyName>
    <SignAssembly>true</SignAssembly>
    <AssemblyOriginatorKeyFile>../../../../Avro.snk</AssemblyOriginatorKeyFile>
    <NoWarn>CS8002</NoWarn> <!-- Referenced assembly 'ZstdNet' does not have a strong name. -->
  </PropertyGroup>

  <PropertyGroup>
    <!-- NuGet Package Settings -->
    <PackageId>Apache.Avro.File.Zstandard</PackageId>
    <Description>Zstandard compression library for Apache.Avro</Description>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)'=='Release'">
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <WarningsAsErrors />
  </PropertyGroup>

  <!-- See lang/csharp/README.md for tool and library dependency update strategy -->
  <ItemGroup>
    <PackageReference Include="Zstandard.Net" Version="$(ZstandardNetVersion)" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="../../main/Avro.main.csproj" />
  </ItemGroup>
</Project>
