<!--
  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>
    <PropertyGroup>
        <LangVersion>8</LangVersion>

        <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
        <WarningsAsErrors/>

        <Company>Apache Software Foundation</Company>
        <Authors>Apache Ignite</Authors>
        <Copyright>© Apache Software Foundation</Copyright>
        <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
        <RepositoryUrl>https://github.com/apache/ignite</RepositoryUrl>
        <RepositoryType>git</RepositoryType>
        <PackageProjectUrl>https://ignite.apache.org/</PackageProjectUrl>
        <PackageIcon>logo_ignite_128x128.png</PackageIcon>
        <SymbolPackageFormat>snupkg</SymbolPackageFormat>
        <PackageTags>Apache;Ignite;In-Memory;Distributed;Computing;SQL;NoSQL;Database;Cache;Grid;Map;Reduce;LINQ</PackageTags>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.2" PrivateAssets="All" />
    </ItemGroup>
    <ItemGroup>
        <None Include="$(MSBuildThisFileDirectory)\logo_ignite_128x128.png" Pack="true" PackagePath=""/>
    </ItemGroup>
</Project>
