代码之家  ›  专栏  ›  技术社区  ›  Marc

将.NET Core ASP应用程序重定目标到.NET 4.6.1时如何重构入口点

  •  -1
  • Marc  · 技术社区  · 7 年前

    我试图建立一个项目与asp.net mvc webapi和一个角6前端。该项目的目标应该是.net 4.6.1,因为我没有跨平台的要求。不过,我还是想使用.NET核心项目模板,因为它有几个特性,我的开发和部署过程需要这些特性:

    • 在VS中没有显式的文件管理,即我不需要在VS中添加/删除文件。项目结构与光盘上的文件结构相同,并实时更新
    • 默认情况下IIS用作应用程序根目录的wwwroot目录
    • 一个很好的参考组织,包括npm包

    到目前为止,我已经使用visual studio中的asp.net核心项目模板设置了它的大部分内容。我做了以下工作:

    1. 从vs模板创建项目
    2. 从更改目标 netcoreapp2.1 net461
    3. 删除了.NET核心引用并添加了ASP.NET MVC程序集

    References

    1. 删除了所有特定于.NET核心的启动类

    2. 重构我的代码(API控制器到.NET4.6.1类,即 IHttpActionResult (.NET 4.6.1而不是 ActionResult (.NET核心)

    不,我需要为应用程序重新构建引导程序,但我卡住了。我创建了一个global.asax文件,就像在一个普通的asp.net应用程序中一样。当编译时,编译器抛出错误 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 Core ASP项目的入口点?

    我的方法正确吗?我很感谢你的回答和资源的链接,这些资源解释了这个话题。

    及相关:

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   Camilo Terevinto Chase R Lewis    7 年前

    你似乎很困惑什么是.NET核心,什么是ASP.NET核心。.NET核心是一个目标框架,而ASP.NET核心是一个库。您正在将ASP.NET核心与ASP.NET内容混合使用,这将永远无法工作,因为ASP.NET核心不基于.NET框架,而ASP.NET则基于.NET框架。

    asp.net core的思想是,您可以根据需要以.net core或.net framework为目标,而无需修改任何内容。事实上,从ASP.NET核心应用程序定位.NET框架非常容易:

    1. 选择web>asp.net核心web应用程序项目模板。
    2. 确保选择了.NET框架:

    enter image description here

    然后可以在项目选项中一如既往地选择所需的.NET Framework版本。

    此外,如果您决定同时支持.NET Core和.NET Framework,那么编辑csproj以包含这两个目标同样容易:

    1. 移除 <TargetFramework> 属性:

      <TargetFramework>net471</TargetFramework>
      
    2. 添加 <TargetFrameworks> 属性:

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