<?xml version="1.0" encoding="utf-8"?>
<!--

 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.

-->
<Project Sdk="Microsoft.NET.Sdk">

  <Import Project="..\..\Version.proj" />
  
  <PropertyGroup>
    <TargetFrameworks>netstandard1.6;net45</TargetFrameworks>
    <PackageTargetFallback Condition=" '$(TargetFramework)' == 'netstandard1.6' ">$(PackageTargetFallback);dnxcore50</PackageTargetFallback>

    <AssemblyTitle>Lucene.Net.Analysis.SmartCn</AssemblyTitle>
    <Description>Analyzer for indexing Chinese for the Lucene.Net full-text search engine library from The Apache Software Foundation.</Description>
    <PackageTags>lucene.net;core;text;search;information;retrieval;lucene;apache;analysis;index;query;chinese;smart</PackageTags>
    <Authors>The Apache Software Foundation</Authors>
    <RepositoryUrl>https://github.com/apache/lucenenet</RepositoryUrl>
    <PackageLicenseUrl>https://github.com/apache/lucenenet/blob/master/LICENSE.txt</PackageLicenseUrl>
    <PackageProjectUrl>http://lucenenet.apache.org/</PackageProjectUrl>
    <PackageIconUrl>https://github.com/apache/lucenenet/blob/master/branding/logo/lucene-net-icon-128x128.png?raw=true</PackageIconUrl>
    <Copyright>Copyright © 2006 - 2017 The Apache Software Foundation</Copyright>
    <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
    <NoWarn>$(NoWarn);1591;1573</NoWarn>

    <GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
    <!--<Configurations>Debug;Release;Debug_NetCoreApp1_0;Release_NetCoreApp1_0</Configurations>-->
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="..\CommonAssemblyInfo.cs" Link="Properties\CommonAssemblyInfo.cs" />
    <EmbeddedResource Include="stopwords.txt" />
    <EmbeddedResource Include="Hhmm\bigramdict.mem" />
    <EmbeddedResource Include="Hhmm\coredict.mem" />
  </ItemGroup>

  <ItemGroup>
	<ProjectReference Include="..\dotnet\Lucene.Net.ICU\Lucene.Net.ICU.csproj" />
    <ProjectReference Include="..\Lucene.Net\Lucene.Net.csproj" />
    <ProjectReference Include="..\Lucene.Net.Analysis.Common\Lucene.Net.Analysis.Common.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="icu.net" Version="54.1.1-alpha" />
  </ItemGroup>

  <!--<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
  </ItemGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
    <DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
    <DebugType>portable</DebugType>
  </PropertyGroup>-->

  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.6' ">
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.3.0" />
  </ItemGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.6' ">
    <DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
    <DebugType>portable</DebugType>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <DebugType>full</DebugType>
  </PropertyGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>

</Project>
