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

-->

<package >
    <metadata>
        <id>Apache.Ignite.EntityFramework</id>
        <title>Apache Ignite Entity Framework Integration</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>
Apache Ignite EntityFramework Second Level Cache: caches EF query results in a distributed in-memory cache.
            
More info: https://apacheignite-net.readme.io/
        </description>
        <summary>
            Apache Ignite EntityFramework Integration
        </summary>
        <copyright>Copyright 2021</copyright>
        <tags>EntityFramework Second-Level Apache Ignite In-Memory Distributed Computing SQL NoSQL Grid Map Reduce Cache</tags>
        <repository type="git" url="https://github.com/apache/ignite.git" />
        <dependencies>
            <group targetFramework=".NETFramework4.0">
                <dependency id="Apache.Ignite" version="[$version$]" />
                <dependency id="EntityFramework" version="[6.1.0,7.0.0)" />
            </group>
        </dependencies>    
    </metadata>
    <files>
	    <file src="bin\$configuration$\Apache.Ignite.EntityFramework.dll" target="lib\net40" />
		<file src="bin\$configuration$\Apache.Ignite.EntityFramework.xml" target="lib\net40" />

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