本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台。

本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单

VisualStudio

建议去官网下载最新的在线安装,然后安装,安装的时候需要选择通用平台开发、桌面开发、跨平台开发。如果你安装的不是中文版,请看下面图片找到差不多的位置,或者全部打勾。

点击安装,可以去睡觉,明天再看我的博客。因为 VisualStudio 的安装是很慢的,如果发现因为自己的网站无法访问,需要代理,可以发邮件给我,我发一个代理给你。

创建项目

现在一起创建三个项目,第一个项目是 UWP 项目,没有什么需要注意,点击创建空白UWP项目就可以。第二个是一个 dotnet standard 项目。第三个是 dotnet core 项目。

UWP

创建一个 UWP 程序是非常简单,点击C#,创建空白项目,随意给个名字,点击确定。注意尽量选择最高的平台,在项目开发是需要通过用户才知道需要选哪个平台。但是在开始学的时候,请尽量选择最新版本,这样可以减少因为版本问题让自己的时间花费在解决版本问题不兼容

如果完全没有开发过 UWP 程序,那么请看win10 uwp 如何开始写 uwp 程序 - CSDN博客

dotnet standard

创建一个 dotnet standard 可以让多个项目使用,在这里放一些类的定义。这个项目叫 Model ,名字不是随便叫的。

dotnet core

右击解决方案,选择新建项目,在弹出的窗口选择 dotnet core ,选择 asp.net core web 程序。

随意给这个项目一个名字,然后点击确定

在弹出的窗口选择 API ,注意不勾选 Docker 支持

现在就创建好了所有项目

引用项目

现在在创建好的 UWP 项目和 asp dotnet core 项目,右击引用,加上 Model 的引用

在 UWP 项目,引用的叫引用,在 asp dotnet core 项目,引用叫依赖项,只需要右击项目,点击添加就可以看到引用

现在使用新的 VisualStudio 打开相同的解决方案,这样才可以进行调试 asp dotnet core 的同时调试 UWP 项目

创建通用结构

现在打开 Model 项目,创建一个类,这个类是通用结构,在多个项目都需要使用。现在决定做这个项目是读取现有的小伙伴的网站和名字,添加新的名字和网站记录。

那么这里的类就需要包含小伙伴的名字和他的网站

public class RoqawzemJajene
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public string Url { get; set; }
    }

可以看到上面的代码多了一个属性 Id ,现在我还不告诉大家为什么需要添加 id ,请在看到本文之后,自己尝试删除 id 然后重新运行项目。

设置控制器

现在打开 asp dotnet core 项目,通过 RoqawzemJajene 添加控制器。控制器就是访问 URL 时可以返回结果的类。通过控制器才可以使用 URL 访问,当然使用其他的方法也是可以做到,但是没有这个方法好用。

右击 Controler 添加,点击添加控制器

选择EF的控制器,请看下面图片。使用这个控制器,就会自动下载 EF 而且帮你设置好很多类,最简单的方法是这样写。如果想知道具体的每个类意思就需要自己去看文档,推荐ASP.NET Core 中文文档目录

这时需要告诉 VisualStudio 使用哪个模型类,和上下文,实际上如果刚才的引用已经写好,而且有 RoqawzemJajene 那么这一步是十分简单的。如果没有按照上面的方法来,那么这一步可能就无法继续。本文下面的也就无法继续。如果实在不知道怎么弄,欢迎在评论告诉我。

点击下拉,可以找到 RoqawzemJajene 这个类

点击了之后会看到没有数据上下文,点击最后的加号就可以自动帮你弄好

现在可以看到和下图差不多的界面,点击添加就可以等着 VisualStudio 帮你添加一些项目了

现在 VisualStudio 会帮你创建两个类

public class TopetowLallteContext : DbContext
    {
        public TopetowLallteContext (DbContextOptions<TopetowLallteContext> options)
            : base(options)
        {
        }

        public DbSet<Model.RoqawzemJajene> RoqawzemJajene { get; set; }
    }
[Produces("application/json")]
    [Route("api/RoqawzemJajenes")]
    public class RoqawzemJajenesController : Controller
    {
        private readonly TopetowLallteContext _context;

        public RoqawzemJajenesController(TopetowLallteContext context)
        {
            _context = context;
        }

        // GET: api/RoqawzemJajenes
        [HttpGet]
        public IEnumerable<RoqawzemJajene> GetRoqawzemJajene()
        {
            return _context.RoqawzemJajene;
        }

        // GET: api/RoqawzemJajenes/5
        [HttpGet("{id}")]
        public async Task<IActionResult> GetRoqawzemJajene([Fromroute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var roqawzemJajene = await _context.RoqawzemJajene.SingleOrDefaultAsync(m => m.Id == id);

            if (roqawzemJajene == null)
            {
                return NotFound();
            }

            return Ok(roqawzemJajene);
        }

        // PUT: api/RoqawzemJajenes/5
        [HttpPut("{id}")]
        public async Task<IActionResult> PutRoqawzemJajene([Fromroute] int id,[FromBody] RoqawzemJajene roqawzemJajene)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != roqawzemJajene.Id)
            {
                return BadRequest();
            }

            _context.Entry(roqawzemJajene).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (dbupdateConcurrencyException)
            {
                if (!RoqawzemJajeneExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return NoContent();
        }

        // POST: api/RoqawzemJajenes
        [HttpPost]
        public async Task<IActionResult> PostRoqawzemJajene([FromBody] RoqawzemJajene roqawzemJajene)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _context.RoqawzemJajene.Add(roqawzemJajene);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetRoqawzemJajene",new { id = roqawzemJajene.Id },roqawzemJajene);
        }

        // DELETE: api/RoqawzemJajenes/5
        [HttpDelete("{id}")]
        public async Task<IActionResult> DeleteRoqawzemJajene([Fromroute] int id)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var roqawzemJajene = await _context.RoqawzemJajene.SingleOrDefaultAsync(m => m.Id == id);
            if (roqawzemJajene == null)
            {
                return NotFound();
            }

            _context.RoqawzemJajene.Remove(roqawzemJajene);
            await _context.SaveChangesAsync();

            return Ok(roqawzemJajene);
        }

        private bool RoqawzemJajeneExists(int id)
        {
            return _context.RoqawzemJajene.Any(e => e.Id == id);
        }
    }

请看上图 RoqawzemJajenesController 就是控制器,TopetowLallteContext 就是数据,里面包含了数据定义。现代的程序员是很少写古老的 sql ,因为很难维护,而且容易写错。只需要直接对DbSet<RoqawzemJajene> RoqawzemJajene列表做修改就可以。对于很多个人项目,不使用 sql 来读写数据库也是没问题。但是对于大型的项目还是需要 sql ,所以有空去学一下还是可以。

因为 asp dotnet core 默认的数据库是 sql server ,如果直接运行项目会说没有找到数据库,所以本文告诉大家使用内存做数据库。

打开 Startup.cs 找到 ConfigureServices ,可以看到下面代码

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddDbContext<TopetowLallteContext>(options =>
                    options.UsesqlServer(Configuration.GetConnectionString("TopetowLallteContext")));
        }

这里 UsesqlServer 就是使用 sql server 数据库,把他修改为options.UseInMemoryDatabase("lindexi")请看代码

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddDbContext<TopetowLallteContext>(options =>
                    options.UseInMemoryDatabase("lindexi"));
        }

这时就可以使用内存放数据,当然这时如果关闭了应用,数据也会没了。

现在打开 RoqawzemJajenesController 构造函数,在第一次进入添加一些数据

public RoqawzemJajenesController(TopetowLallteContext context)
        {
            _context = context;
            if (!context.RoqawzemJajene.Any())
            {
                context.RoqawzemJajene.Add(new RoqawzemJajene()
                {
                    Name = "lindexi",Url = "https://lindexi.oschina.io"
                });

                context.SaveChanges();
            }
        }

在这里添加修改列表都需要调用 context.SaveChanges() 保存

运行网站

先右击 asp dotnet core 项目属性,点击调试,可以看到下面界面

因为不需要使用浏览器,所以去掉启动浏览器。需要记下端口,这个端口在下面的 UWP 项目使用。

请看上图,我的应用 URL 里面包含了端口 64043

http://localhost:64043/

现在右击设置 asp dotnet core 项目为启动项目,然后按下 F5 运行这个项目

UWP 连接

打开 UWP 程序,先创建一个 viewmodel 用于数据绑定。本文不会告诉大家很多关于 viewmodel 的方法,如果想了解这个写法,请看win10 uwp MVVM入门

viewmodel

现在需要定义一个数据结构,ObservableCollection 的列表,这样可以在界面绑定

public class viewmodel
    {
        public ObservableCollection<RoqawzemJajene> RoqawzemJajeneList { get; set; } =
            new ObservableCollection<RoqawzemJajene>();
    }

绑定数据

界面绑定,首先需要添加 viewmodel 属性,打开 MainPage.xaml.cs 添加下面代码

public MainPage()
        {
            this.InitializeComponent();
            DataContext = viewmodel;
        }

        public viewmodel viewmodel { get; } = new viewmodel();

界面

然后在 MainPage.xaml 添加一个列表,在这个 ListView 可以用来显示列表

<Grid>
        <Grid.RowDeFinitions>
            <RowDeFinition />
            <RowDeFinition Height="Auto" />
        </Grid.RowDeFinitions>
        <ListView ItemsSource="{x:Bind viewmodel.RoqawzemJajeneList}">
            <ListView.ItemContainerStyle>
                <Style targettype="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> </Style>
            </ListView.ItemContainerStyle>
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="model:RoqawzemJajene">
                    <Grid>
                        <Grid.ColumnDeFinitions>
                            <ColumnDeFinition Width="100" />
                            <ColumnDeFinition></ColumnDeFinition>
                        </Grid.ColumnDeFinitions>
                        <TextBlock Text="{x:Bind Name}"></TextBlock>
                        <TextBlock Grid.Column="1" Text="{x:Bind Url}"></TextBlock>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <StackPanel Grid.Row="1" Orientation="Horizontal">
            <Button Margin="10,10,10" Content="下载数据" Click="Button_OnClick"></Button>
        </StackPanel>
    </Grid>

因为使用了 DataType ,所以需要添加引用

xmlns:model="using:Model"

因为现在添加了一个按钮下载数据,所以需要打开 MainPage.xaml.cs 添加下面代码

private void Button_OnClick(object sender,RoutedEventArgs e)
        {
            // 更新数据
        }

现在的 UWP 软件是可以编译通过的,但是运行是不会显示内容

下载列表

在 MainPage.xaml.cs 的 Button_OnClick 调用 viewmodel 的函数用来更新数据

private void Button_OnClick(object sender,RoutedEventArgs e)
        {
            viewmodel.Update();
        }

这时可能会觉得这样写不好,因为有 x:bind 可以在 xaml 绑定 viewmodel 的方法为什么还需要添加在按钮。因为这样写我可以在按钮点击下去同时做一些动画。

现在打开 viewmodel 先添加引用

using System.Net.Http;

然后打开 Update 函数,访问 URL 需要用到 HttpClient,还记得刚才的 RoqawzemJajenesController 里面有这样的代码

[Route("api/RoqawzemJajenes")]
    public class RoqawzemJajenesController : Controller

这里的 Route 就是路由,也就是在 URL 后面添加 api/RoqawzemJajenes 就可以访问这个控制器。默认的 Get 方法就是通过 GetRoqawzemJajene 实现。

[HttpGet]
        public IEnumerable<RoqawzemJajene> GetRoqawzemJajene()
        {
            return _context.RoqawzemJajene;
        }

所以想调用 GetRoqawzemJajene 方法就需要访问 http://localhost:64043/api/RoqawzemJajenes,需要知道,这里的链接的端口是需要在上面右击 asp dotnet core 项目属性,调试那里才知道。

因为 asp dotnet core 程序返回的是 json ,可以通过设置让他返回 xml 。因为刚才没设置,默认返回的格式是 json 。

为了解析数据,需要在 Nuget 安装 json ,打开 Nuget 安装第一个就可以

通过简单的 Get 的方法访问 URL 可以使用下面代码,参见 win10 UWP GET Post - CSDN博客

public async Task Update()
        {
            var httpClient = new HttpClient();
            var url = "http://localhost:64043/";

            url = url + "api/RoqawzemJajenes";
            var str = await httpClient.GetStringAsync(url);
            var roqawzemJajeneList = JsonConvert.DeserializeObject<List<RoqawzemJajene>>(str);

            RoqawzemJajeneList.Clear();

            foreach (var temp in roqawzemJajeneList)
            {
                RoqawzemJajeneList.Add(temp);
            }
        }

上面的代码通过 Get 访问 URL 拿到数据只需要一句话

var str = await httpClient.GetStringAsync(url);

因为这里使用了异步,所以修改了方法,需要在 MainPage.xaml.cs 的 Button_OnClick 修改

private async void Button_OnClick(object sender,RoutedEventArgs e)
        {
            await viewmodel.Update();
        }

现在尝试运行 asp dotnet core 项目,然后再运行 UWP 项目,这时点击一下 UWP 项目的下载数据,就可以看到如下图界面

现在就完成了 UWP 程序的连接

上传数据

现在尝试上传数据,因为写界面速度比较慢,所以直接添加一个按钮,里面把我的一个小伙伴的信息传上去。

虽然刚才的代码已经有一个函数可以用来上传数据

public async Task<IActionResult> PostRoqawzemJajene([FromBody] RoqawzemJajene roqawzemJajene)

但是为了让大家知道如何使用路由,所以修改一下这个参数。

我希望访问 http://localhost:64043/api/RoqawzemJajenes/add 来添加一个小伙伴。

这时可以在 PostRoqawzemJajene 添加特性。打开 RoqawzemJajenesController ,进入 PostRoqawzemJajene ,在函数上面添加下面代码

[Route("add")]
        [HttpPost]
        public async Task<IActionResult> PostRoqawzemJajene([FromBody] RoqawzemJajene roqawzemJajene)

现在打开 viewmodel 添加一个函数

public async Task Add()
        {
            var roqawzemJajene = new RoqawzemJajene()
            {
                Name = "头像",Url = "https://huangtengxiao.gitee.io/"
            };

            var url = Url + "api/RoqawzemJajenes/add";

            var httpClient = new HttpClient();

            var str = JsonConvert.SerializeObject(roqawzemJajene);

            var stringContent = new StringContent(str);
            stringContent.Headers.ContentType.MediaType = "application/json";

            await httpClient.PostAsync(url,stringContent);
        }

这里的 Url 是因为在很多函数都需要使用,所以我把 http://localhost:64043/ 拿出来。在 UWP 使用 post 是很简单,只需要一句代码

await httpClient.PostAsync(url,stringContent);

现在打开 MainPage.xaml 添加一个按钮

<Button Margin="10,10" Content="上传" Click="Add_OnClick"></Button>

然后打开 MainPage.xaml.cs 添加函数

private async void Add_OnClick(object sender,RoutedEventArgs e)
        {
            await viewmodel.Add();
            await viewmodel.Update();
        }

现在尝试运行 UWP 程序,然后点击上传,可以看到这个界面

如果刚才的代码有地方没有写对,如 stringContent 没有添加下面代码

stringContent.Headers.ContentType.MediaType = "application/json";

或者写的 Url 不对,都可以在 asp dotnet core 项目的输出看到和下面差不多的输出

Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Dev.Message","time":"2018-06-03T07:31:44.4397220Z","tags":{"ai.application.ver":"1.0.0.0","ai.operation.id":"d8ff58c-4a3bece1b1751287","ai.location.ip":"127.0.0.1","ai.internal.nodeName":"DESKTOP-KA1CD6M","ai.operation.name":"POST /api/add","ai.cloud.roleInstance":"DESKTOP-KA1CD6M","ai.internal.sdkVersion":"aspnet5c:2.1.1","ai.operation.parentId":"|d8ff58c-4a3bece1b1751287."},"data":{"baseType":"MessageData","baseData":{"ver":2,"message":"Request starting HTTP/1.1 POST http://localhost:64043/api/add 0","severityLevel":"information","properties":{"CategoryName":"Microsoft.AspNetCore.Hosting.Internal.WebHost","Scheme":"http","Method":"POST","Host":"localhost:64043","ContentLength":"0","Path":"/api/add","Protocol":"HTTP/1.1","AspNetCoreEnvironment":"Development","DeveloperMode":"true"}}}}
Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Dev.Message","time":"2018-06-03T07:31:44.4417985Z","message":"Request finished in 2.0912ms 404","StatusCode":"404","ElapsedMilliseconds":"2.0912","DeveloperMode":"true"}}}}
Application Insights Telemetry (unconfigured): {"name":"Microsoft.ApplicationInsights.Dev.Request","time":"2018-06-03T07:31:44.4395938Z","tags":{"ai.location.ip":"127.0.0.1","ai.application.ver":"1.0.0.0"},"data":{"baseType":"RequestData","id":"|d8ff58c-4a3bece1b1751287.","name":"POST /api/add","duration":"00:00:00.0045034","success":false,"responseCode":"404","url":"http://localhost:64043/api/add","properties":{"httpMethod":"POST","DeveloperMode":"true"}}}}

在这里,如何写一个简单的 cs 程序已经告诉了大家,建议完全复制代码来试试。如果发现还是无法运行,看到的界面和我不一样。那么尝试下载我的代码来试试。

如果遇到任何问题欢迎通过评论告诉我,或发邮件给我。

代码:手把手教你使用 asp dotnet core 做 cs 程序 1.1-CSDN下载

我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序的更多相关文章

  1. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  3. Canvas图片分割效果的实现

    这篇文章主要介绍了Canvas图片分割效果的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. HTML5 Canvas实现放大镜效果示例

    这篇文章主要介绍了HTML5 Canvas实现放大镜效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)

    这篇文章主要介绍了Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. html5如何在Canvas中实现自定义路径动画示例

    本篇文章主要介绍了html5如何在Canvas中实现自定义路径动画示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. canvas实现圆形进度条动画的示例代码

    这篇文章主要介绍了canvas实现圆形进度条动画的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. HTML5 Blob 实现文件下载功能的示例代码

    这篇文章主要介绍了HTML5 Blob 实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. 教你使用Canvas处理图片的方法

    本篇文章主要介绍了教你使用Canvas处理图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. 如何在.NET Core类库中使用System.Windows.Forms

    我的project.json文件:我所有的net40特定代码都在NET40下定义.有什么想法吗?

  2. 发布到IIS.省略在服务器上安装.NET Core Windows Server Hosting软件包

    ASP.NETCore文档说,其中一个先决条件是目标服务器上的install.NETCoreWindowsServerHostingbundle.是否有可能以某种方式将此依赖项包含在由dotnet-publish创建的自包含包中,并避免现场安装?不.该软件包包含Asp.Net核心模块–以及使用IIS运行Asp.NETCore应用程序所需的本机IIS模块.如果未安装Asp.NET核心模块并且您通过安

  3. CentOS下安装.net core环境并部署WebAPI

    如果提示如下内容就说明启动成功了。

  4. 在CentOS上使用VS Code调试.Net Core应用程序

    VSCode运行后会看到如下图所示的效果。在VSCode界面中,单击最左边的图标按钮中的最后一个图标来安装扩展。主要的扩展包括C#、CodeRunner、C#Extensions和C#FixFormat。如果直接使用Yum安装,安装的是1.8版本的,不符合VSCode所需的版本要求2.1以上的要求,这个只能编译安装了,具体安装步骤可参考《HowtoInstallGit2.15onCentOS/RHEL7/6,Fedora27/26/25》这篇文章。一切准备就绪,现在可将应用程序项目通过SFTP上传到服务器

  5. CentOS 7下发布.net core 2.0 过程

    第5步:在vs中发布工程到本地磁盘发布后的结果如下第6步:验证工程是否可以运行在CMD中切换到发布的目录,执行命令:dotnetASPCore2.dll如果出现如下图所示表明发布成功,可以测试一下localhost:50003.发布到CentOS,并启动服务第1步:用WinSCP拷贝至CentOS系统中的/var/www/qa/中第2步:在CentOS中测试是否可以运行:在Xshell中执行:/opt/core2.0.3/dotnet/var/www/qa/ASPCore2.dll结果没有问题,在Cent

  6. 部署.net core到CentOS系统

    locationNum=10&fps=1

  7. CentOS下使用.Net Core 1.1部署WebApi

    一、安装CentOS系统二、在CentOS上安装最新的.NetCore安装教程在官网已经很详细了。

  8. Ubuntu &amp; GitLab CI &amp; Docker &amp; ASP.NET Core 2.0 自动化发布和部署1

    经过上面四篇博文中的相关安装和配置,我们主要完成了两个容器的创建和运行:gitlab和gitlab-runner:本篇博文目的:使用GitLabCI脚本编译ASP.NETCore2.0程序,然后将编译后的文件传输到服务器上,最后使用SSH连接服务器,并运行程序,完成发布和部署。简单来说,就是我们每次使用gitpush提交完代码,自动完成发布和部署。

  9. 在CentOS上部署Asp.net Core应用程序

    在此之前,我将同样的程序已经成功发布到了Ubuntu,我觉得,既然已经有了前一次的成功经验,不论CentOS还是Ubuntu都是Linux,道理应该差不多吧。但事实证明,还是有些差异的,某些在CentOS上频出的问题在Ubuntu上却没有,所以我的感觉是Ubuntu部署Asp.netCore程序更容易些。Asp.netCore应用需要反向代理配合才能运行,IIS、Apache和Nginx等Web服务软件都可以作为它的反向代理。在Ubuntu下部署与这个差不多,某些命令不一样。

  10. dotnet core 在ubuntu 上运行 F#

    dotnetcore在ubuntu上运行F#线装dotnetcoreubuntusudoapt-getupdatesudoapt-getinstallmono-completefsharpsudoyumupdatesudoyuminstallmono-completefsharp

返回
顶部