最近工作中使用到了.net core进行跨平台开发,用了好几天时间了解了.net core以及如何发布一个程序,下面就记录一下过程
因为所有的环境都在内网下,所有的安装包都需要提前下载好
1. vs我使用的是vs2019,先在内网安装好vs,安装时我是把能选的关于.net core的包都选择安装了,避免后面程序因为什么库没装运行不了
2. 下载 dotnet-sdk-3.1.101-win-x64.exe安装程序,在内网安装
下载地址:https://dotnet.microsoft.com/download/dotnet-core/3.1 选择SDK3.1.1 然后根据自己电脑是32还是64位的选择好,安装完成后,windows+R打开cmd命令提示符,输入dotnet --version,可以看到版本则证明安装完成了
3. .net core程序的几种部署方式
官网对于三种部署方式解释的比较清楚 https://docs.microsoft.com/zh-cn/dotnet/core/deploying/
本文使用的是SCD部署方式 主要是因为最终的程序是准备在linux环境下运行,但在内网的linux中截止此文章前没有办法安装.net core的SDK,因为安装.net coreSDK需要依赖libicu库,内网目前没有libicu的源, 只能装一个aspnetcore-runtime去运行部署好的net core程序 后续有时间应该会解决这个问题(今天更新 问题已解决)
4. 接下来是创建一个.net core程序
1)选择“文件” > “新建” > “项目”。 在“新建项目”对话框中,在“已安装”项目类型窗格中展开你的语言的(C# 或 Visual Basic)项目类别,选择“控制台应用.NET Core”,然后下一步选择“名称”文本框中输入项目名称等,如“test”选择“创建”按钮
2)在编辑器中打开 Program.cs 或 Program.vb 文件,然后使用下列代码替换自动生成的代码。 它会提示用户输入文本,并显示用户输入的个别词。 它使用正则表达式 \w+ 来将输入文本中的词分开。代码地址:https://docs.microsoft.com/zh-cn/dotnet/core/deploying/deploy-with-vs?tabs=vs156 这个是官网的例子。
3)如果是面向linux部署程序,官网建议使用全球化固定模式,即编辑test.csproj文件,增加红色部分(如果是发布到linux,出现了set System.Globalization.Invariant错误,请记起来配置全球化固定模式 已经踩坑了。)如果是在linux下编译的话 可以直接声明环境变量 DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true 然后声明dotnet所在的目录,放在环境变量中就行
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.Invariant" Value="true" />
</ItemGroup>
</Project>
4)选择“生成” > “生成解决方案”。 也可通过选择“调试” > “开始调试”来编译和运行应用程序的调试版本。 通过此调试步骤,可以识别应用程序在主机平台上运行时出现的问题。 仍然必须在每个目标平台上对其进行测试。
5. 确定在windows运行成功之后,就可以发布了
1)右键单击解决方案资源管理器的项目名字,选择发布
2)如果仅发布到单个平台,则可以在“选择文件夹”文本框中接受默认值;这会将应用程序的依赖框架的部署发布到 <project-directory>\bin\Release\netcoreapp2.1\publish 目录。
如果要发布到多个平台,请附加标识目标平台的字符串。 例如,如果将字符串“linux”追加到文件路径,Visual Studio 将应用程序的依赖框架的部署发布到 <project-directory>\bin\Release\netcoreapp2.1\publish\linux 目录。
3)选择“创建配置文件”按钮以创建配置文件。
4)在“发布”对话框中,选择“编辑”以打开“配置文件设置”对话框
在“部署模式”列表框中选择“独立”,在“目标运行时”列表框中,选择应用程序所面向的某个平台,本文需要运行在linux上,所以选linux-64,选择“保存”以接受更改并关闭对话框
5)点击发布按钮 完成后会在本工程目录下的bin/Release/.../publish看到发布好的程序,这时就可以把publish所在的文件夹一起拷贝进linux
在内网点击发布时,还会遇到发布失败的情况 这种情况下,会在工程目录下的bin/Release/netcoreapp.3.1/目录下生成已经构建好的程序,还是可以拷贝到linux上去运行的 我这里遇到的是无法加载源 https://api.nuget.org/v3/index.json的服务索引错误,主要原因是发布的时候向外网服务器发送一个请求,因为是在内网环境,肯定不能请求成功 所以会报一段时间没有正确答复或者连接的主机没有反应,连接失败 请求的地址和端口是23.101.10.141:443
6. 拷贝至linux上之后,就可以在linux上运行了
1)如果前面发布成功,没有报错 就不用进行下面的步骤了 直接把publish文件夹拷贝到要运行的平台加上权限运行即可,比如你项目名叫test.csproj 在publish目录下就会生成对应平台可运行的二进制文件,windows就是test.exe,linux就是test
2)如果前面发布失败,会在工程目录下的bin/Release/netcoreapp.3.1/目录下有一个test.dll文件
这时候就需要去官网下载.NET Core Runtime 3.1.1,传送门 https://dotnet.microsoft.com/download/dotnet-core/3.1 这个是运行.net core程序的工具,根据自己的linux系统选择对应的二进制下载
2)因为我的是x86_64的centos操作系统,我选的是x64二进制文件下载,然后放进内网,解压
cd ~/ && mkdir -p dotnet && tar zxf aspnetcore-runtime-3.1.1.1-linux-x64.tar.gz -C ~/dotnet
3)把bin/Release/文件夹拷贝至linux上
4)进入Release目录,运行 dotnet test.dll
本文介绍了在内网环境下,如何在Linux中运行使用VS2019发布的.NET Core程序。首先在内网安装VS2019和.NET Core SDK,然后创建并调试.NET Core程序,发布后将其复制到Linux系统,通过.NET Core Runtime运行。
3958

被折叠的 条评论
为什么被折叠?



