﻿<?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="$(SolutionDir)TestTargetFramework.props" />

  <PropertyGroup>
    <PackageTargetFallback Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">$(PackageTargetFallback);dnxcore50</PackageTargetFallback>

    <AssemblyTitle>Lucene.Net.Tests.TestFramework.MSTest</AssemblyTitle>
    <RootNamespace>Lucene.Net</RootNamespace>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <RuntimeIdentifiers>win7-x86;win7-x64</RuntimeIdentifiers>

    <DefineConstants>$(DefineConstants);TESTFRAMEWORK_MSTEST</DefineConstants>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="..\Lucene.Net.Tests.TestFramework\**\*.cs" />
    <Compile Remove="..\Lucene.Net.Tests.TestFramework\obj\**\*;..\Lucene.Net.Tests.TestFramework\bin\**\*" />
    <Compile Remove="..\Lucene.Net.Tests.TestFramework\Properties\*.cs" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Lucene.Net.TestFramework.MSTest\Lucene.Net.TestFramework.MSTest.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
    <PackageReference Include="MSTest.TestFramework" Version="$(MSTestTestFrameworkPackageVersion)" />
    <PackageReference Include="MSTest.TestAdapter" Version="$(MSTestTestAdapterPackageVersion)" />
    <!--<PackageReference Include="TeamCity.VSTest.TestAdapter" Version="$(TeamCityVSTestTestAdapterPackageVersion)" />-->
  </ItemGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">
    <DefineConstants>$(DefineConstants);FEATURE_THREAD_PRIORITY</DefineConstants>
    <DebugType>portable</DebugType>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp1.0' ">
    <DefineConstants>$(DefineConstants);NETSTANDARD1_6</DefineConstants>
    <DebugType>portable</DebugType>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(TargetFramework)' == 'net451' ">
    <DefineConstants>$(DefineConstants);FEATURE_SERIALIZABLE_EXCEPTIONS;FEATURE_THREAD_PRIORITY</DefineConstants>
    <DebugType>full</DebugType>
  </PropertyGroup>

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

</Project>
