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

Compilation F:“如何避免”;[FS0988]程序的主模块为空:运行时不会发生任何事情;在测试项目中?,compilation,f#,compiler-warnings,Compilation,F#,Compiler Warnings,我有一个包含以下项目的.NET解决方案: 控制台:控制台.NET核心2.2 域:.NET标准2.0 Domain.Tests:Console.NET核心2.2(XUnit) 基础设施:.NET标准2.0 MyDomain.Tests.fsproj定义为: 假的 假的 netcoreapp2.2 但在编译解决方案时,我有以下警告: ValidatePhoneNumberChangeTests.fs(102,35):[FS0988]程序的主模块为空:运行时不会发生任何事情 我检查并在域的最后

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

  • 控制台
    :控制台.NET核心2.2
  • :.NET标准2.0
  • Domain.Tests
    :Console.NET核心2.2(XUnit)
  • 基础设施
    :.NET标准2.0
My
Domain.Tests.fsproj
定义为:


假的
假的
netcoreapp2.2
但在编译解决方案时,我有以下警告:

ValidatePhoneNumberChangeTests.fs
(102,35):[FS0988]程序的主模块为空:运行时不会发生任何事情

我检查并在
域的最后一个文件末尾添加了
do()
。Tests
ValidatePhoneNumberChangeTests.fs
没有执行任何操作


我能做些什么来消除这个警告?

@rmunn在评论中的做法是正确的<当
TargetFramework
netstandardXX
net4XX
时,code>默认为
Library
,当
TargetFramework
netcoreappXX
时,默认为
Exe

<TargetFramework>netcoreapp2.2</TargetFramework>

设置
Library
是解决此问题的最佳方法,而不是添加一个不会被调用的入口点。

运行测试需要
netcoreapp2.2
(至少这是我在Rider中的经验)在这种情况下,您可以通过在
ValidatePhoneNumberChangeTests.fs
的末尾添加此方法或在编译顺序的末尾添加
Program.fs
[]让main argv=0
Program.fs
在编译顺序的末尾使用
[]让main argv=0
完成此操作,谢谢!我认为是
属性将项目指定为可执行文件或类库。根据默认设置,它默认为
,但我看到过多个堆栈溢出问题,询问为什么MSBuild在没有
的情况下构建的是exe而不是dll,所以可以尝试将
添加到.fsproj中,看看这有什么作用?(如果是这样,你会想删除
Program.fs
文件,因为DLL中不需要这个文件)。也就是说,如果我改为Library+.NET标准,Rider不再运行单元测试=/(因此在一天结束时,这可能更像是一个Rider问题)我刚刚遇到了这个问题,添加库似乎无法解决此问题,但事实并非如此。
<TargetFramework>netstandard2.0</TargetFramework>
[<EntryPoint>] 
let main argv =
    0