<!--

 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>
  <Import Project="build\Dependencies.props" />

  <PropertyGroup>
    <LangVersion>9.0</LangVersion>
  </PropertyGroup>
  
  <!-- IMPORTANT: When these values are changed, the CI counter number should also be reset. -->
  <PropertyGroup Label="Version of Builds">
    <!-- IMPORTANT: VersionPrefix must always be the same as the Lucene version this is based on.
      Never increment it for an individual build - only increment this when an entire version's changes
      are ported over from Lucene. This is what determines the version of all of the NuGet packages and binaries. 
      For patching a production build, we will add a 4th segment (4.8.0.1) since it would be confusing to increment to 
      4.8.1 if we haven't actually ported over the changes from Lucene 4.8.1. -->
    <VersionPrefix>4.8.0</VersionPrefix>

    <!-- .NET enforces AssemblyVersion as the "major" version (when strong-named),
      so AssemblyVersion should only be changed for each major version release. -->
    <AssemblyVersion>4.0.0</AssemblyVersion>
  </PropertyGroup>

  <PropertyGroup Label="Assembly Signing">
    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)Lucene.Net.snk</AssemblyOriginatorKeyFile>
    <PublicKey>002400000480000094000000060200000024000052534131000400000100010075a07ce602f88ef263c7db8cb342c58ebd49ecdcc210fac874260b0213fb929ac3dcaf4f5b39744b800f99073eca72aebfac5f7284e1d5f2c82012a804a140f06d7d043d83e830cdb606a04da2ad5374cc92c0a49508437802fb4f8fb80a05e59f80afb99f4ccd0dfe44065743543c4b053b669509d29d332cd32a0cb1e97e84</PublicKey>
    <SignAssembly>true</SignAssembly>
  </PropertyGroup>

  <PropertyGroup Label="Assembly Publishing">
    <IsPublishable>false</IsPublishable>
  </PropertyGroup>

  <PropertyGroup Label="NuGet Package Defaults">
    <IsPackable>false</IsPackable>
    <IncludeSymbols>true</IncludeSymbols>
    <!-- This is the new symbols format (the only one currently supported at NuGet.org) -->
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
  </PropertyGroup>
  
  <PropertyGroup Label="Copyright Info">
    <Product>Lucene.Net</Product>
    <Company>The Apache Software Foundation</Company>
    <CurrentYear Condition=" '$(CurrentYear)' == '' ">$([System.DateTime]::UtcNow.Year.ToString())</CurrentYear>
    <BeginCopyrightYear>2006</BeginCopyrightYear>
    <CopyrightYearRange>$(BeginCopyrightYear) - $(CurrentYear)</CopyrightYearRange>
    <CopyrightYearRange Condition=" '$(BeginCopyrightYear)' == '$(CurrentYear)' ">$(CurrentYear)</CopyrightYearRange>
    <Copyright>Copyright © $(CopyrightYearRange) $(Company)</Copyright>
  </PropertyGroup>

  <!-- Settings to override the above Version of Builds. These can be used to 
      "freeze" the build number for a release, so whether building within 
      an IDE or from the commmand line, the version is always what is 
      in Version.props, if it exists and the PrepareForBuild argument 
      passed into build.ps1 is 'false'. -->
  <Import Project="Version.props" Condition="Exists('Version.props')" />
</Project>