一切福田,不離方寸,從心而覓,感無不通。

Category Archives: .Net Core

在 Windows 服务中托管 ASP.NET Core

不将 IIS 用作 Windows 服务时,可在 Windows 上托管 ASP.NET Core 应用。 作为 Windows 服务托管时,无需人工干预应用即可在重新启动和崩溃后自动启动。 查看或下载示例代码(如何下载) 将项目转换为 Windows 服务 要将现有 ASP.NET Core 项目设置为作为服务运行,至少需要执行以下更改: 在项目文件中: 确认是否存在 Windows 运行时标识符 (RID),或将其添加到包含目标框架的 <PropertyGroup> 中: XML复制

要发布多个 RID: 通过以分号分隔的列表提供 RID。 使用属性名称 <RuntimeIdentifiers>(复数)。 有关详细信息,请参阅 .NET Core RID 目录。 为 Microsoft.AspNetCore.Hosting.WindowsServices 添加包引用。 在 Program.Main 中,进行下列更改: 调用 host.RunAsService,而不是 host.Run。 调用 UseContentRoot 并使用应用的发布位置路径,而不是 Directory.GetCurrentDirectory()。 C#复制

发布应用。 使用 dotnet publish 或 Visual Studio 发布配置文件。 使用 Visual Studio 时,请选择 FolderProfile。 要使用命令行接口 (CLI) 工具发布示例应用,请在项目文件夹的命令提示符处运行 dotnet publish 命令。 必须在项目文件的 <RuntimeIdenfifier>(或 <RuntimeIdentifiers>)属性中指定 RID。 在以下示例中,应用在 win7-x64 运行时的发布配置中发布: console复制

使用 sc.exe 命令行工具创建服务。 binPath 值是应用的可执行文件的路径,其中包括可执行文件的文件名。 等于号和路径开头的引号字符之间需要添加空格。 console复制

对于项目文件夹中发布的服务,请使用 publish 文件夹的路径创建服务。 如下示例中: 该项目位于 c:\my_services\AspNetCoreService 文件夹中。 项目在 Release 配置中发布。 目标框架名字对象 (TFM) 为 netcoreapp2.1。 运行时标识符 (RID) 为 win7-x64。 应用可执行文件名为 AspNetCoreService.exe。 服务名为 MyService。 示例: console复制

重要 确保 binPath= 参数与其值之间存在空格。 从其他文件夹发布和启动服务: 使用 dotnet publish 命令上的 --output <OUTPUT_DIRECTORY> 选项。 如果使用 Visual Studio,请在“FolderProfile”发布属性页面中配置“目标位置”,然后再选择“发布”按钮。 通过使用输出文件夹路径的 sc.exe 命令创建服务。 在向 binPath 提供的路径中包含服务可执行文件的名称。 使用 sc […]

龙生   07 Nov 2018
View Details

为 .NET Core 应用程序生成 Docker 映像

本教程重点介绍了如何在 Docker 上使用 .NET Core。 首先,我们探讨 Microsoft 维护和提供的各种不同的 Docker 映像,及其使用情况。 然后讲解了如何生成和 Docker 化 ASP.NET Core 应用。 在本教程中可学习: 了解 Microsoft.NET 核心 Docker 映像 获取用于 dockerize 的 ASP.NET Core 示例应用程序 在本地运行 ASP.NET 示例应用 使用 Docker for Linux 容器生成和运行示例 使用 Docker for Windows 容器生成和运行示例 Docker 映像优化 为开发人员生成 Docker 映像时,侧重于以下三种主要方案: 用于开发 .NET Core 应用的映像 用于生成 .NET Core 应用的映像 用于运行 .NET Core 应用的映像 为什么是三个映像? 因为在开发、生成和运行容器化应用程序时,具有不同的优先级。 开发: 优先级注重循环访问更改的速度以及调试更改的能力。 与更改代码并且快速查看相比,映像的大小是否不是那么重要? 生成: 此映像包含编译应用所需的所有内容,其中包括编译器和任何其他用于优化二进制文件的依赖项。 可使用生成映像创建置于生产映像中的资产。 生成映像用于持续集成或用于生成环境中。 此方法允许生成代理在生成映像实例中编译和生成应用程序(包括所有必需的依赖项)。 生成代理只需要了解如何运行此 Docker 映像即可。 生产: 部署和启动映像的速度可以有多快? 此映像很小,因此从 Docker 注册表到 Docker 主机的网络性能得到了优化。 已准备运行内容,以此实现从 Docker 运行到处理结果的最快时间。 Docker 模型中不需要动态代码编译。 放置在此映像中的内容将限制为运行应用程序所需的二进制文件和内容。 例如,dotnet publish 输出包含: 已编译的二进制文件 .js 和 .css 文件 在生产映像中包括 dotnet publish 命令输出的原因是使生产映像保持最小大小。 某些 .NET Core 映像共享不同标记之间的层,因此下载最新标记是一个相对轻量的过程。 如果计算机上已有较早版本,此体系结构会降低所需的磁盘空间。 当多个应用程序在同一计算机上使用公共映像时,在公共映像之间共享内存。 映像必须相同才可共享。 Docker 映像变体 为了实现上述目标,我们在 microsoft/dotnet 下提供了映像变体。 microsoft/dotnet:<version>-sdk(microsoft/dotnet:2.1-sdk) 此映像包含带有 […]

龙生   22 Oct 2018
View Details

Docker 容器、映像和注册表

使用 Docker 时,开发人员会创建一个应用或服务,并将它及其依赖项打包到一个容器映像中。 映像是应用或服务及其配置和依赖项的静态表示形式。 若要运行应用或服务,应用的映像会实例化,以创建一个在 Docker 主机上运行的容器。 最初,会在开发环境或 PC 中测试容器。 开发人员应将映像存储在注册表中,该注册表可充当映射库并在部署到生产业务流程协调程序时使用。 Docker 通过 Docker 中心维护公共注册表;其他供应商为不同映像集合提供注册表,包括 Azure 容器注册表。 或者,企业可以拥有一个本地专用注册表,用于其 Docker 映像。 图 2-4 显示了 Docker 中的映像和注册表与其他组件相关联的方式。 还显示了供应商的多个注册表产品/服务。 图 2-4。 Docker 术语和概念的分类 将映射存储到注册表中可存储静态和不可变的应用程序,包括其在框架级别的所有依赖项。 然后,这些映像可部署到多种环境中,并进行版本控制,从而提供一致的部署单元。 无论是托管在本地还是托管在云中,在下列情况下都建议使用专用映像注册表: 由于保密性,不能公开分享映像。 在映像和所选部署环境之间,希望网络延迟保持最低。 例如,如果生产环境是 Azure 云,为实现最低的网络延迟,可将映像存储在 Azure 容器注册表中。 同样,如果生产环境是在本地,便需要使本地 Docker 信任的注册表在相同的本地网络中可用。 from:https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/container-docker-introduction/docker-containers-images-registries

龙生   22 Oct 2018
View Details

Docker 术语

本节列出了在深入了解 Docker 之前应熟悉的术语和定义。 有关进一步的定义,请参阅 Docker 提供的详细术语表。 容器映像:包含创建容器所需的所有依赖项和信息的包。 映像包括所有依赖项(例如框架),以及容器运行时使用的部署和执行配置。 通常情况下,映像派生自多个基础映像,这些基础映像是堆叠在一起形成容器文件系统的层。 创建后,映像不可变。 Dockerfile:包含有关如何生成 Docker 映像的说明的文本文件。 与批处理脚本相似,首先第一行将介绍基础映像,然后是关于安装所需程序、复制文件等操作的说明,直至获取所需的工作环境。 生成:基于其 Dockerfile 提供的信息和上下文生成容器映像的操作,以及生成映像的文件夹中的其他文件。 可以使用 Docker 的“docker 生成”命令生成映像。 容器:Docker 映像的实例。 容器表示单个应用程序、进程或服务的执行。 它由 Docker 映像的内容、执行环境和一组标准指令组成。在缩放服务时,可以从相同的映像创建多个容器实例。 或者,批处理作业可以从同一个映像创建多个容器,向每个实例传递不同的参数。 卷:提供一个容器可以使用的可写文件系统。 由于映像只可读取,而多数程序需要写入到文件系统,因此卷在容器映像顶部添加了一个可写层,这样程序就可以访问可写文件系统。 程序并不知道它正在访问的是分层文件系统,此文件系统就是往常的文件系统。 卷位于主机系统中,由 Docker 管理。 标记:可以应用于映像的标记或标签,以便可以识别同一映像的不同映像或版本(具体取决于版本号或目标环境)。 多阶段生成:Docker 17.05 或更高版本的一个功能,可帮助减小最终映像的大小。 概括来说,借助多阶段生成,可以使用一个包含 SDK 的大型基础映像(以此为例)编译和发布应用程序,然后使用发布文件夹和一个小型仅运行时基础映像生成一个更小的最终映像 存储库 (repo):相关的 Docker 映像集合,带有指示映像版本的标记。 某些存储库包含特定映像的多个变量,例如包含 SDK(较重)的映像,包含唯一运行时(较轻)的映像,等等。这些变量可以使用标记进行标记。 单个存储库中可包含平台变量,如 Linux 映像和 Windows 映像。 注册表:提供存储库访问权限的服务。 大多数公共映像的默认注册表是 Docker 中心(归作为组织的 Docker 所有)。 注册表通常包含来自多个团队的存储库。 公司通常使用私有注册表来存储和管理其创建的映像。 另一个示例是 Azure 容器注册表。 多体系结构映像:就多体系结构而言,它是一种根据运行 Docker 的平台简化相应映像选择的功能,例如当 Dockerfile 从注册表请求基础映像 FROM microsoft/dotnet:2.1-sdk 时,实际上它会获得 2.1-sdk-nanoserver-1709、2.1-sdk-nanoserver-1803 或 2.1-sdk-alpine,具体取决于操作系统和运行 Docker 的版本。 Docker Hub:上传并使用映像的公共注册表。 Docker 中心提供 Docker 映像托管、公共或私有注册表,生成触发器和 Web 挂钩,以及与 GitHub 和 Bitbucket 集成。 Azure 容器注册表:用于在 Azure 中使用 Docker 映像及其组件的公共资源。 这提供了接近 Azure 中部署的注册表,授予控制访问权限,使其可以使用 Azure Active Directory 组和权限。 Docker 受信任注册表 (DTR):Docker 注册表服务(来自 Docker),可以安装在本地,因此它存在于组织的数据中心和网络中。 这对于应该在企业内部管理的私有映像来说很方便。 Docker 受信任注册表是 Docker 数据中心产品的一部分。 有关详细信息,请参阅 Docker 受信任注册表 […]

龙生   22 Oct 2018
View Details

什么是 Docker?

Docker 是一种开源项目,用于将应用程序自动部署为可在云或本地运行的便携式独立容器。 Docker 也是一家公司,它与云、Linux 和 Windows 供应商(包括 Microsoft)协作,致力于推广和发展这项技术。 图 2-2。 Docker 在混合云的所有层部署容器 Docker 映像容器可以在 Linux 和 Windows 上本机运行。 但是,Windows 映像仅能在 Windows 主机上运行,Linux 映像可以在 Linux 主机和 Windows 主机上运行(到目前为止,使用 Hyper-V Linux VM),其中主机是指服务器或 VM。 开发人员可以在 Windows、Linux 或 macOS 上使用开发环境。 在开发计算机上,开发人员运行部署了 Docker 映像(包括应用及其依赖项)的 Docker 主机。 在 Linux 或 Mac 上进行开发的开发人员使用基于 Linux 的 Docker 主机,并且他们可以仅为 Linux 容器创建映像。 (在 Mac 上进行开发的开发人员可以从 macOS 中编辑代码或运行 Docker CLI,但截至撰写本文时,容器不在 macOS 上直接运行。)在 Windows 上进行开发的开发人员可以为 Linux 或 Windows 容器创建映像。 为了在开发环境中承载容器,并提供其他开发人员工具,Docker 为 Windows 或 macOS 提供了 Docker 社区版 (CE)。 这些产品安装了承载容器所需的 VM(Docker 主机)。 Docker 还提供 Docker 企业版 (EE),该版本专为企业开发而设计,供生成、交付和在生产中运行大型业务关键型应用程序的 IT 团队使用。 若要运行 Windows 容器,有两种类型的运行时可供使用: Windows Server 容器通过进程和命名空间隔离技术提供应用程序隔离。 Windows Server 容器与容器主机和主机上运行的所有容器共享内核。 Hyper-V 容器通过在高度优化的虚拟机中运行各容器来扩展 Windows Server 容器提供的隔离。 在此配置中,容器主机的内核不与 Hyper-V […]

龙生   22 Oct 2018
View Details

容器和 Docker 简介

容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。 容器化应用程序可以作为一个单元进行测试,并可以作为容器映像实例部署到主机操作系统 (OS)。 就像船只、火车或卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。 按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。 容器还会在共享 OS 上将应用程序彼此隔离开。 容器化应用程序在容器主机上运行,而容器主机在 OS(Linux 或 Windows)上运行。因此,容器的占用比虚拟机 (VM) 映像小得多。 每个容器可以运行整个 Web 应用或服务,如图 2-1 所示。 在此示例中,Docker 主机是容器主机,而 App1、App2、Svc 1 和 Svc 2 是容器化应用程序或服务。 图 2-1. 在一个容器主机上运行多个容器 容器化的另一个优势在于可伸缩性。 通过为短期任务创建新容器,可以快速扩大。 从应用程序的角度来看,实例化映像(创建容器)类似于实例化 服务或 Web 应用等进程。 但出于可靠性考虑,在多个主机服务器上运行同一映像的多个实例时,通常要使每个容器(映像实例)在不同容错域中的不同主机服务器或 VM 中运行。 总而言之,容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和运营之间提供隔离。 from:https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/container-docker-introduction/index

龙生   22 Oct 2018
View Details

使用ML.NET预测纽约出租车费

有了上一篇《.NET Core玩转机器学习》打基础,这一次我们以纽约出租车费的预测做为新的场景案例,来体验一下回归模型。 场景概述 我们的目标是预测纽约的出租车费,乍一看似乎仅仅取决于行程的距离和时长,然而纽约的出租车供应商对其他因素,如额外的乘客数、信用卡而不是现金支付等,会综合考虑而收取不同数额的费用。纽约市官方给出了一份样本数据。   确定策略 为了能够预测出租车费,我们选择通过机器学习建立一个回归模型。使用官方提供的真实数据进行拟合,在训练模型的过程中确定真正能影响出租车费的决定性特征。在获得模型后,对模型进行评估验证,如果偏差在接受的范围内,就以这个模型来对新的数据进行预测。   解决方案 创建项目 看过上一篇文章的读者,就比较轻车熟路了,推荐使用Visual Studio 2017创建一个.NET Core的控制台应用程序项目,命名为TaxiFarePrediction。使用NuGet包管理工具添加对Microsoft.ML的引用。 准备数据集 下载训练数据集taxi-fare-train.csv和验证数据集taxi-fare-test.csv,数据集的内容类似为:

对字段简单说明一下: 字段名 含义 说明 vendor_id 供应商编号 特征值 rate_code 比率码 特征值 passenger_count 乘客人数 特征值 trip_time_in_secs 行程时长 特征值 trip_distance 行程距离 特征值 payment_type 支付类型 特征值 fare_amount 费用 目标值 在项目中添加一个Data目录,将两份数据集复制到该目录下,对文件属性设置“复制到输出目录”。 定义数据类型和路径 首先声明相关的包引用。

在Main函数的上方定义一些使用到的常量。

接下来定义一些使用到的数据类型,以及和数据集中每一行的位置对应关系。

  创建处理过程 创建一个Train方法,定义对数据集的处理过程,随后声明一个模型接收训练后的结果,在返回前把模型保存到指定的位置,以便以后直接取出来使用不需要再重新训练。

  评估验证模型 创建一个Evaluate方法,对训练后的模型进行验证评估。

  预测新数据 定义一个被用于预测的新数据,对于各个特征进行恰当地赋值。

预测的方法很简单,prediction即预测的结果,从中打印出预测的费用和真实费用。

  运行结果 到此我们完成了所有的步骤,关于这些代码的详细说明,可以参看《Tutorial: Use ML.NET to Predict New York Taxi Fares (Regression)》,只是要注意该文中的部分代码有误,由于使用到了C# 7.1的语法特性,本文的代码是经过了修正的。完整的代码如下:

  不知不觉我们的ML.NET之旅又向前进了一步,是不是对于使用.NET Core进行机器学习解决现实生活中的问题更有兴趣了?请保持关注吧。   from:http://www.cnblogs.com/BeanHsiang/p/9017618.html

龙生   15 Sep 2018
View Details

.NET Core玩转机器学习

ML.NET 专门为.NET开发者提供了一套跨平台的开源的机器学习框架。 ML.NET支持.NET开发者不需要过度专业的机器学习开发经验,就能轻松地训练自己的模型,并且嵌入到自己的应用中。一切尽在.NET之中。ML.NET早期是由Microsoft Research开发,近十年来逐步集成到一个大体系中被众多Microsoft产品使用,如大家熟知的Windows、Bing、PowerPoint、Excel之类。 ML.NET的第一个预览版提供了分类器(如文本分类、情感分析)和回归(如价格预测)等实用的机器学习模型。第一版发布后在既有功能之上又新增了关于训练模型的.NET API,使用这些模型进行预测,就像框架中算法、转换、数据结构一类核心组件一样的开发体验。 接下来用个示例,一起进入快速上手的实践中来。 安装.NET SDK 为了创建一个.NET应用,首先下载 .NET SDK。 创建应用 使用如下命令初始化项目,创建一个控制台应用程序,目标为myApp:

  安装ML.NET包 使用如下命令安装Microsoft.ML包:

  下载数据集 假设我们使用机器学习来预测鸢尾花的类型,比如有setosa、versicolor、virginica三种,基于特征有四种:花瓣长度、花瓣宽度, 萼片长度、萼片宽度。 去UCI Machine Learning Repository: Iris Data Set下载一个现成的数据集,复制粘贴其中的数据到任何一个文本编辑器中,然后保存命名为iris-data.txt到myApp目录中。 粘贴完文本内容应该是如下格式,每一行表示不同鸢尾花的样本,数值的部分从左到右依次是萼片长度、萼片宽度、花瓣长度、花瓣宽度,最后是鸢尾花的类型。

如果是使用了Visual Studio,将iris-data.txt添加至项目中,需要进行如下配置确保运行时数据集文件在输出的目录中。 编写代码 打开Program.cs文件,输入以下代码:

运行应用 使用如下命令行运行程序:

  在最后一行将输出对花的预测结果,你可以修改传给Predict函数各种鸢尾花的特征值看看有什么不同的结果。 恭喜,你已经跨入使用ML.NET进行机器学习的门槛了!   from:http://www.cnblogs.com/BeanHsiang/p/9010267.html

龙生   15 Sep 2018
View Details

asp.net core类库发布到nuget服务一定要建目标环境文件夹

最近公司有些小项目要用asp.net core尝试一下,局域网内建了内部的nuget服务。今天搞好.net core类库后发布过程一切顺利。 但在具体的项目中还原nuget包后直接提示: 警告 NU1701 已使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v2.1”还原包“DBCore 1.0.8”。此包可能与项目不完全兼容。 首先,怀疑是不是引用了.net core不支持的类库,然后把依赖全删除,不行。 然后,还是怀疑自己的类库有问题,就新建了一个空白的.net core类库,还原后还是提示。 然后,拿redis的nuget包发布上去,还原了一下,还是提示。 最后发现redis的类库是以目标框架作为文件夹的!!!然后在lib下增加了文件夹netcoreapp2.1,问题解决。

龙生   11 Sep 2018
View Details
1 11 12 13 17