<Project Sdk="Microsoft.NET.Sdk.Web">
  <!--
    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.
  -->

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <LangVersion>latestMajor</LangVersion>
    <AssemblyName>Server</AssemblyName>
    <PackageId>Server</PackageId>
    <OutputType>Exe</OutputType>
    <Version>0.23.0.0</Version>
    <Nullable>enable</Nullable>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
    <GenerateAssemblyCopyrightAttribute>false</GenerateAssemblyCopyrightAttribute>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="../Interfaces/Interfaces.csproj" />
    <ProjectReference Include="../../../lib/netstd/Thrift/Thrift.csproj" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net7.0'">
    <PackageReference Include="Microsoft.AspNetCore.Components.Web">
      <Version>7.0.9</Version>
    </PackageReference>
  </ItemGroup>
</Project>
