F#:如何在测试项目中避免“[FS0988] 程序的主模块为空:运行时不会发生任何事情”?

Eho*_*ret 3 f# compilation compiler-warnings

我有一个包含以下项目的 .NET 解决方案:

  • Console:控制台 .NET Core 2.2
  • Domain: .NET 标准 2.0
  • Domain.Tests:控制台 .NET Core 2.2 (XUnit)
  • Infrastructure: .NET 标准 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>
Run Code Online (Sandbox Code Playgroud)

但是在编译解决方案时,我有以下警告:

ValidatePhoneNumberChangeTests.fs(102, 35): [FS0988] 程序的主模块为空:运行时什么都不会发生

在 SO 上检查了该答案,do()在最后一个文件的末尾添加了Domain.Tests:ValidatePhoneNumberChangeTests.fs没有做任何事情。

我能做些什么来摆脱这个警告?

Tar*_*mil 8

@rmunn 在评论中走在正确的轨道上。<OutputType>默认为何LibraryTargetFrameworknetstandardXXnet4XXExe何时TargetFrameworknetcoreappXX

设置<OutputType>Library</OutputType>是 IMO 解决此问题的最佳方法,而不是添加不会被调用的入口点。


Sim*_*lds 5

<TargetFramework>netcoreapp2.2</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

这将 Domain.Tests 项目指定为可执行文件

如果您只需要它是一个类库,那么将其更改为

<TargetFramework>netstandard2.0</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

如果您只是想删除警告,您可以通过在编译顺序的末尾ValidatePhoneNumberChangeTests.fs或末尾添加它来添加一个 main 方法Program.fs

[<EntryPoint>] 
let main argv =
    0
Run Code Online (Sandbox Code Playgroud)