【问题标题】:Porting a solution with multiple startup projects from .NET Framework 4.7.1 to .NET Core 2.1将具有多个启动项目的解决方案从 .NET Framework 4.7.1 移植到 .NET Core 2.1
【发布时间】:2019-04-21 13:59:57
【问题描述】:

我正在将我的解决方案从 .NET Standard(针对 .NET Framework 4.7.1)迁移到 .NET Core(针对 netcoreapp2.1)。我的解决方案包含 12 个项目,其中两个是需要同时运行的 Web API 项目。

我将所有解决方案的 .csproj 中的目标从“net471”更改为“netcoreapp2.1”。在少数情况下,我还必须更新代码中的 API。关于潜在的包不兼容,我仍在处理几个警告。

但是我的主要问题是以下错误:

错误 CS0017 程序定义了多个入口点。使用 /main 编译以指定包含入口点的类型。 Foo.Api D:\Code\Product\Foo\src\Foo.Api\Program.cs 9 活动

我的解决方案有两个启动项目,因为它由两个相关但独立的 API 组成。我不想指定一个作为主要,因为我需要它们在启动我的解决方案时同时启动,并且在 .NET Framework 下这没问题。

是否可以让这些项目一起启动?

请注意,如果我将<StartupObject>Foo.Api.Program</StartupObject> 添加到我的API 项目之一as described here,我可以成功启动该项目。我认为这相当于用 /main 编译。但是,我不能让其他 API 项目以相同的方式启动。相反,我可以dotnet run 该项目并让它们都运行。但是,需要解决编译时错误才能通过我们的发布管道。

我的解决方案中肯定只有这两种主要方法。以下是在void Main 上的查找结果:

【问题讨论】:

  • 这可能会有所帮助:andrewlock.net/…
  • 感谢@JohnB,但我相信该链接可以处理生成的单元测试项目主方法与生产项目主方法冲突的错误。在这种情况下,您可以抑制测试项目主方法的生成。就我而言,我希望并且需要两个项目都有一个启动的主要方法。我的解决方案不能涉及禁止我的一个项目。
  • 一个 C# 程序(不是解决方案)只能有一个 Program.Main()。 main 是程序启动时运行的第一个方法,所以编译器需要知道哪个是真正的,如果有两个就不能。
  • 感谢@DalmTo 的评论,但我的两个启动项目(不是解决方案)都只有一个Program.Main(),所以它们都应该能够运行。
  • @Ivan 您收到的错误消息与此相矛盾。建议您再检查一下。

标签: c# .net-core visual-studio-2017 asp.net-core-webapi porting


【解决方案1】:

我的问题已解决,但我仍然不确定是什么原因造成的。

我引用了一些给出以下警告的包:

警告 NU1701 包“CacheManager.SystemRuntimeCaching 1.1.2”已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.1”恢复。此软件包可能与您的项目不完全兼容。

我升级了大部分,除了上面的例外,我能够同时运行和调试两个启动项目而没有错误。我的猜测是这些软件包之一存在某种冲突。

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多