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

<!--  THIS IS A GENERATED FILE - DO NOT MODIFY THIS FILE DIRECTLY - see pom.xml -->
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Build">
    <TargetFrameworks>netstandard1.3;netstandard2.0</TargetFrameworks>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

  <PropertyGroup Label="Package">
    <Version>3.3.11-SNAPSHOT</Version>
    <FileVersion>3.3.11.0</FileVersion>
    <AssemblyVersion>3.3.0.0</AssemblyVersion>
    <Title>Gremlin.Net</Title>
    <Authors>Apache TinkerPop</Authors>
    <Description>Gremlin.Net for Apache TinkerPop™ is a language variant and driver for .NET.

Apache TinkerPop™ is a graph computing framework for both graph databases (OLTP) and graph analytic systems (OLAP). Gremlin is the graph traversal language of TinkerPop. It can be described as a functional, data-flow language that enables users to succinctly express complex traversals on (or queries of) their application's property graph.

Gremlin.Net implements Gremlin within .NET. C# syntax has the same constructs as Java including "dot notation" for function chaining (a.b.c), round bracket function arguments (a(b,c)), and support for global namespaces (a(b()) vs a(__.b())). As such, anyone familiar with Gremlin-Java will immediately be able to work with Gremlin.Net. Moreover, there are a few added constructs to Gremlin.Net that make traversals a bit more succinct.

Gremlin.Net is designed to connect to a "server" that is hosting a TinkerPop-enabled graph system. That "server" could be Gremlin Server

http://tinkerpop.apache.org/docs/current/reference/#gremlin-server

or a remote graph provider that exposes protocols by which Gremlin.Net can connect.

Please see the reference documentation of Apache TinkerPop for more information on usage: https://s.apache.org/pgbwu

and use our Google Group gremlin-users if there are any questions: https://s.apache.org/c8hru

NOTE that versions suffixed with "-rc" are considered release candidates (i.e. pre-alpha, alpha, beta, etc.) and thus for early testing purposes only.</Description>
    <AssemblyOriginatorKeyFile>../../build/tinkerpop.snk</AssemblyOriginatorKeyFile>
    <SignAssembly>true</SignAssembly>
    <PackageId>Gremlin.Net</PackageId>
    <PackageTags>gremlin;tinkerpop;apache</PackageTags>
    <PackageProjectUrl>http://tinkerpop.apache.org</PackageProjectUrl>
    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
    <PackageIcon>gremlin-dotnet-logo_256x256.png</PackageIcon>
    <PackageIconUrl>http://tinkerpop.apache.org/docs/current/images/gremlin-dotnet-logo_256x256.png</PackageIconUrl>
    <RepositoryUrl>https://github.com/apache/tinkerpop</RepositoryUrl>
    <PublishRepositoryUrl>true</PublishRepositoryUrl>    
    <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All"/>
    <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
    <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.3'">
    <PackageReference Include="System.Net.WebSockets" Version="4.3.0" />
    <PackageReference Include="System.Net.WebSockets.Client" Version="4.3.2" />
    <PackageReference Include="System.Reflection.TypeExtensions" Version="4.3.0" />
  </ItemGroup>

  <ItemGroup>
    <None Include="../../LICENSE" Pack="true" PackagePath=""/>
    <None Include="../../NOTICE" Pack="true" PackagePath=""/>
    <None Include="../../../docs/static/images/gremlin-dotnet-logo_256x256.png" Pack="true" PackagePath="\"/>
  </ItemGroup>

</Project>
