C# 将.NET核心ASP应用程序重定目标为.NET 4.6.1时如何重构入口点

C# 将.NET核心ASP应用程序重定目标为.NET 4.6.1时如何重构入口点,c#,asp.net-core,C#,Asp.net Core,我正在尝试用ASP.NET MVC WebApi和Angular 6前端建立一个项目。该项目应该以.NET4.6.1为目标,因为我没有跨平台的需求。尽管如此,我还是想使用.NET core项目模板,因为它有一些我在开发和部署过程中需要的特征: VS中没有明确的文件管理,也就是说,我不需要在VS中添加/删除文件。项目结构与光盘上的文件结构相同,可以实时更新 默认情况下IIS用作应用程序根的wwwroot目录 一个很好的参考组织,包括npm包 到目前为止,我已经使用Visual Studio中的

我正在尝试用ASP.NET MVC WebApi和Angular 6前端建立一个项目。该项目应该以.NET4.6.1为目标,因为我没有跨平台的需求。尽管如此,我还是想使用.NET core项目模板,因为它有一些我在开发和部署过程中需要的特征:

  • VS中没有明确的文件管理,也就是说,我不需要在VS中添加/删除文件。项目结构与光盘上的文件结构相同,可以实时更新
  • 默认情况下IIS用作应用程序根的wwwroot目录
  • 一个很好的参考组织,包括npm包
到目前为止,我已经使用Visual Studio中的ASP.NET核心项目模板设置了大部分内容。我做了以下工作:

  • 从VS模板创建项目
  • 将目标从
    netcoreapp2.1
    更改为
    net461
  • 删除了.NET核心引用并添加了ASP.NET MVC程序集
  • 删除了所有特定于.NET内核的启动类

  • 将我的代码(API控制器)重构为.NET 4.6.1类,即
    IHttpActionResult
    (.NET 4.6.1而不是
    ActionResult
    )(.NET核心)

  • 不,我需要重新构建应用程序的引导,我被卡住了。我已经像在普通ASP.NET应用程序中一样创建了一个global.asax文件。在构建时,编译器抛出错误,
    Program.cs
    不包含静态
    Main()
    方法作为入口点(这很有意义,因为我在步骤4中删除了它)

    接下来,我尝试创建一个入口点,用于启动在
    global.asax.cs
    中定义的应用程序:

    public class Program
    {
      public static void Main(string[] args)
      {
          var application = new WebApiApplication();
          application.Init();
          Console.ReadLine();
      }
    }
    
    使用global.asax.cs:

    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
    
    应用程序编译并运行。浏览器启动。然后什么也不发生

    我的主要问题是:

    将目标更改为.NET 4.6.1后,如何重构.NET核心ASP项目的入口点?

    我的方法是否正确?我很感谢您的回答以及与解释该主题的资源的链接

    和相关的:


    根据我上面的要求,将.NET core应用程序重定向到.NET 4.6.1以获得Visual Studio中的.NET core项目结构和行为是否正确?

    您似乎对什么是.NET core和什么是ASP.NET core感到非常困惑。NET core是一个目标框架,而ASP.NET core是一个库。您正在混合ASPNET Core与ASP.NET的内容将永远无法工作,因为ASP.NET Core不基于.NET Framework,而ASP.NET是

    ASP.NET Core的理念是,您可以将.NET Core或.NET Framework视为合适的目标,而无需修改任何内容。事实上,从ASP.NET Core应用程序将.NET Framework作为目标非常简单:

  • 选择Web>ASP.NET核心Web应用程序项目模板
  • 确保选择了.NET Framework:
  • 然后,您可以一如既往地在项目选项中选择所需的.NET Framework版本

    此外,如果您决定同时支持.NET Core和.NET Framework,则只需编辑csproj即可同时包含这两个目标:

  • 删除
    属性:

    <TargetFramework>net471</TargetFramework>
    
    <TargetFrameworks>net471;netcoreapp2.0</TargetFrameworks>
    
    net471
    
  • 添加
    属性:

    <TargetFramework>net471</TargetFramework>
    
    <TargetFrameworks>net471;netcoreapp2.0</TargetFrameworks>
    
    net471;netcoreapp2.0
    

  • 您似乎对什么是.NET Core和什么是ASP.NET Core感到非常困惑。NET Core是一个目标框架,而ASP.NET Core是一个库。您将ASP.NET Core与ASP.NET内容混合在一起,这是永远不会起作用的,因为ASP.NET Core不基于.NET framework,而ASP.NET是

    ASP.NET Core的理念是,您可以将.NET Core或.NET Framework视为合适的目标,而无需修改任何内容。事实上,从ASP.NET Core应用程序将.NET Framework作为目标非常简单:

  • 选择Web>ASP.NET核心Web应用程序项目模板
  • 确保选择了.NET Framework:
  • 然后,您可以一如既往地在项目选项中选择所需的.NET Framework版本

    此外,如果您决定同时支持.NET Core和.NET Framework,则只需编辑csproj即可同时包含这两个目标:

  • 删除
    属性:

    <TargetFramework>net471</TargetFramework>
    
    <TargetFrameworks>net471;netcoreapp2.0</TargetFrameworks>
    
    net471
    
  • 添加
    属性:

    <TargetFramework>net471</TargetFramework>
    
    <TargetFrameworks>net471;netcoreapp2.0</TargetFrameworks>
    
    net471;netcoreapp2.0
    

  • 谢谢你!我不知道我在路上在哪里迷路了。谢谢你!我不知道我在路上在哪里迷路了。你为什么不发表评论就投了反对票?一定是一些非常沮丧的人。你为什么不发表评论就投了反对票?一定是一些非常沮丧的人。