F #: Как избежать "[FS0988] Основной модуль программы пуст: ничего не произойдет, когда он будет запущен" в тестовом проекте? - PullRequest
1 голос
/ 13 июня 2019

У меня есть решение .NET со следующими проектами:

  • Console: консоль .NET Core 2.2
  • Domain: .NET Standard 2.0
  • Domain.Tests: консоль .NET Core 2.2 (XUnit)
  • Infrastructure: .NET Standard 2.0

Мой Domain.Tests.fsproj определяется как:

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

    <PropertyGroup>

        <IsPackable>false</IsPackable>
        <GenerateProgramFile>false</GenerateProgramFile>
        <TargetFramework>netcoreapp2.2</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="FsCheck" Version="3.0.0-alpha4" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
        <PackageReference Include="xunit" Version="2.4.0" />
        <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
    </ItemGroup>

    <ItemGroup>
      <Compile Include="Dsl.fs" />
      <Compile Include="OpenAccountTests.fs" />
      <Compile Include="CloseAccountTests.fs" />
      <Compile Include="DepositCashTests.fs" />
      <Compile Include="WithdrawCashTests.fs" />
      <Compile Include="WireMoneyTests.fs" />
      <Compile Include="RequestAddressChangeTests.fs" />
      <Compile Include="RequestEmailChangeTests.fs" />
      <Compile Include="RequestPhoneNumberChangeTests.fs" />
      <Compile Include="ValidateAddressChangeTests.fs" />
      <Compile Include="ValidateEmailChangeTests.fs" />
      <Compile Include="ValidatePhoneNumberChangeTests.fs" />
    </ItemGroup>

    <ItemGroup>
      <ProjectReference Include="..\Domain\Domain.fsproj" />
    </ItemGroup>

</Project>

Но при составлении решения у меня появляется следующее предупреждение:

ValidatePhoneNumberChangeTests.fs (102, 35): [FS0988] Основной модуль программы пуст: при запуске ничего не произойдет

Я проверил этот ответ на SO и добавил do() в конце последнего файла Domain.Tests: ValidatePhoneNumberChangeTests.fs ничего не сделал.

Что я могу сделать, чтобы избавиться от этого предупреждения?

Ответы [ 2 ]

4 голосов
/ 13 июня 2019
<TargetFramework>netcoreapp2.2</TargetFramework>

Указывает проект Domain.Tests как исполняемый файл

Если вам нужна только библиотека классов, измените его на

<TargetFramework>netstandard2.0</TargetFramework>

Если вы просто хотитеубрав предупреждение, вы можете добавить основной метод, добавив его в конце ValidatePhoneNumberChangeTests.fs или в Program.fs в конце порядка компиляции

[<EntryPoint>] 
let main argv =
    0
3 голосов
/ 13 июня 2019

@ rmunn находится на правильном пути в комментариях. <OutputType> по умолчанию Library, когда TargetFramework равно netstandardXX или net4XX, и Exe, когда TargetFramework равно netcoreappXX.

Установка <OutputType>Library</OutputType> - это лучший способ исправить эту проблему, вместо добавления точки входа, которая не будет вызываться.

...