把旧系统迁移到.Net Core 2.0 日记 (12) --发布遇到的问题

1. 开发时是在Mac+MySql, 尝试发布时是在SQL2005+Win 2008 (第一版)

在Startup.cs里,数据库连接要改,分页时netcore默认是用offset关键字分页, 如果用SQL2012之前的版本,就要改

            //-----Use SqlServer, 默认用offset分页(这个是sql2012版本之后才有的功能)
            services.AddDbContextPool<CRMContext>(
                tt => tt.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection"),
                                                        opt=>opt.UseRowNumberForPaging())
           );

2. SQL2005 没有datetime2类型, EFCore默认处理datetime是用datetime2类型

            //如果db是SQL2005,没有datetime2的类型.要手工指定
            modelBuilder.Entity<Announcement>().Property(t => t.CreateDate).HasColumnType("datetime");
            modelBuilder.Entity<Announcement>().Property(t => t.ModifyDate).HasColumnType("datetime");

3. 发布的目录结构和之前的.net不同

4.  Kestrel 服务器 如何启动?

我们知道.net core我们可以使用dotnet 命令方式去运行 .net core 应用,这种方式使我们的web不再依赖于iis,实现了跨平台。
我们先了解下命令:

> dotnet run [options] [[--] arguments]
dotnet run 命令会把我们的项目编译后直接运行,在开发的时候使用,如果是编译好的项目,则使用:

> dotnet yourproject.dll [[--] arguments]
如果我们需要配置Urls的话,则只要使用参数--urls="http://*:5005",例如:

> dotnet run --urls="http://*:5005"
如果这时候你如此运行,你会发现你的项目并未监听5005端口,因为你还没有对Kestrel进行配置,告诉其读取命令行参数,我们需要在Build host的时候进行如下配置:

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddCommandLine(args)   //添加对命令参数的支持
    .Build();

    var host = WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();

    host.Run();
}
ok,这时候再运行dotnet run命令吧!

5. 如何发布到IIS7?

安装 DotNetCore.2.0.5-WindowsHosting(貌似我的win2008安装不了,要2008R2才能安装), 安装DotNetCore SDK, 安装VC 2015 Redist

http://www.cnblogs.com/tianma3798/p/6947287.html

http://www.cnblogs.com/a-dou/p/6685582.html

猜你喜欢

转载自www.cnblogs.com/zitjubiz/p/net_core_daily_12_Kestrel_iis.html