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

-->

<package >
    <metadata>
        <id>Apache.Ignite.AspNet</id>
        <title>Apache Ignite ASP.NET Integration</title>
        <!-- -->
        <version>$version$</version>
        <authors>Apache Ignite</authors>
        <owners>Apache Software Foundation</owners>
        <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0</licenseUrl>
        <projectUrl>https://ignite.apache.org/</projectUrl>
        <iconUrl>https://ignite.apache.org/images/logo_ignite_32_32.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>
Output Cache Provider: caches page output in a distributed in-memory cache.
Session State Store Provider: stores session state data in a distributed in-memory cache.
            
More info: https://apacheignite-net.readme.io/
        </description>
        <releaseNotes></releaseNotes>
        <copyright>Copyright 2018</copyright>
        <tags>OutputCacheProvider Apache Ignite In-Memory Distributed Computing SQL NoSQL Grid Map Reduce Cache</tags>
        <dependencies>
            <dependency id="Apache.Ignite" version="[$version$]" />
        </dependencies>    
    </metadata>
    <files>
	    <file src="bin\$configuration$\Apache.Ignite.AspNet.dll" target="lib\net40" />
		<file src="bin\$configuration$\Apache.Ignite.AspNet.xml" target="lib\net40" />
    </files>
</package>