<?xml version="1.0"?>

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

<!-- 

Creating NuGet package:
1) Build Apache.Ignite.sln (AnyCPU configuration)
2) Create package (use csproj instead of nuspec so that template substitution works): 
   nuget pack Apache.Ignite.Log4Net.csproj -Prop Configuration=Release -Prop Platform=AnyCPU

-->

<package >
    <metadata>
        <id>Apache.Ignite.Log4Net</id>
        <title>Apache Ignite log4net Logger</title>
        <!-- -->
        <version>$version$</version>
        <authors>Apache Ignite</authors>
        <owners>Apache Software Foundation</owners>
        <license type="expression">Apache-2.0</license>
        <projectUrl>https://ignite.apache.org/</projectUrl>
        <icon>images\logo_ignite_128x128.png</icon>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>log4net Logger for Apache Ignite</description>
        <copyright>Copyright 2021</copyright>
        <tags>Apache Ignite In-Memory Distributed Computing SQL NoSQL LINQ Grid Map Reduce Cache log4net logger</tags>
        <repository type="git" url="https://github.com/apache/ignite.git" />
        <dependencies>
            <group targetFramework=".NETFramework4.0">
                <dependency id="Apache.Ignite" version="[$version$]" />
                <dependency id="log4net" version="[2.0.0, 3.0.0)" />                
            </group>
            <group targetFramework=".NETStandard2.0">
                <dependency id="Apache.Ignite" version="[$version$]" />
                <dependency id="log4net" version="[2.0.6, 3.0.0)" />
            </group>
        </dependencies>    
    </metadata>
    <files>
	    <file src="bin\$configuration$\Apache.Ignite.Log4Net.dll" target="lib\net40" />
		<file src="bin\$configuration$\Apache.Ignite.Log4Net.xml" target="lib\net40" />

	    <file src="bin\$configuration$\Apache.Ignite.Log4Net.dll" target="lib\netstandard2.0" />
		<file src="bin\$configuration$\Apache.Ignite.Log4Net.xml" target="lib\netstandard2.0" />

        <!-- Icon -->
        <file src="..\logo_ignite_128x128.png" target="images\" />
    </files>
</package>
