<?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.NLog.csproj -Prop Configuration=Release -Prop Platform=AnyCPU

-->

<package >
    <metadata>
        <id>Apache.Ignite.NLog</id>
        <title>Apache Ignite NLog 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>NLog Logger for Apache Ignite</description>
        <copyright>Copyright 2021</copyright>
        <tags>Apache Ignite In-Memory Distributed Computing SQL NoSQL LINQ Grid Map Reduce Cache NLog 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="NLog" version="[4.0.0, 5.0.0)" />
            </group>
            <group targetFramework=".NETStandard2.0">
                <dependency id="Apache.Ignite" version="[$version$]" />
                <dependency id="NLog" version="[4.5.0, 5.0.0)" />
            </group>
        </dependencies>    
    </metadata>
    <files>
	    <file src="bin\$configuration$\Apache.Ignite.NLog.dll" target="lib\net40" />
		<file src="bin\$configuration$\Apache.Ignite.NLog.xml" target="lib\net40" />

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

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