首页 > 编程语言 >发布.NET应用程序,不单独安装运行时

发布.NET应用程序,不单独安装运行时

时间:2024-07-24 23:06:47浏览次数:14  
标签:应用程序 单独 发布 文件夹 即可 应用 NET 运行

很多.NET开发者编译好的的程序,发布到另外一台电脑的时候,往往都不能运行,而是需要安装运行时。这个大多数人都知道,直接去运行时官网下载对应版本的安装包即可。比如我用了6.0,那么选择对应架构的版本下载即可。然后在目标机器上安装这个包,就可以运行我们的.NET程序了。
image

这样操作起来还是有点麻烦,有没有办法把.NET运行时的dll摘出来,和我们的程序放在一起,这样程序发布到目标机器,不就直接可以运行了。答案是肯定的,微软官网提供了非常详细的发布说明:将应用发布为独立应用,将生成特定于平台的可执行文件。 输出发布文件夹包含应用的所有组件,包括 .NET 库和目标运行时。 应用独立于其他 .NET 应用,且不使用本地安装的共享运行时。 应用的用户无需下载和安装 .NET。我做了一个表格,大概说明一下几种方式的优缺点,这样看起来更加直观。

发布依赖于框架的应用 发布独立应用 使用 ReadyToRun 映像发布
是否依赖.NET运行时
应用大小

总体来说,就是发布独立应用的时候,VS会自动帮你把.Net runtime的dll摘出来,放在exe根目录publish文件夹,这样直接copy这个文件夹即可,也算是用磁盘空间换操作时间的最优办法了。

那么如何发布独立应用呢?

1.命令行

点击“视图”--—“终端”,或者用快捷键Ctrl+~,在终端中输入dotnet publish -r win-x64,如果你想发布面向MacOS的包,只需要输入dotnet publish -r osx-x64,只需要更换最后的一个参数即可。那么问题来了,最后一个参数是什么样的标准,嗯,你可以参考.NET RID 目录。这个里面有各种平台的架构定义,查找你需要的架构替换即可。
发布完成后,去终端提示的目录即可找到需要的独立应用。
image

2.UI操作

如果你不想用命令行,也可以使用界面操作,这样就不需要查找刚才的架构定义表。
找到解决方案,右击找到“发布”。
image

选择发布到本地文件夹。当然你也可以发布到Azure云或者Docker,毕竟.NET是跨平台的。
image

再次选择本地
image

选择发布目录,支持局域网地址
image

点击完成后,先不要急着发布。点击“更多操作”,编辑一下配置
image

这里有非常详细的配置选择,以及是否发布单个文件或者使用ReadyToRun编译,来缩短程序启动时间。保存后,点击发布即可。
image
发布完成后,exe目录多了一大堆dll,磁盘空间也增加了100多MB的大小。如果你觉得这样太杂乱了,可以在上一个界面那里,选择“生成单个文件”,文件夹就瞬间清净了。
image

本文参考微软官方文档:应用程序发布

标签:应用程序,单独,发布,文件夹,即可,应用,NET,运行
From: https://www.cnblogs.com/hupo376787/p/18314356

相关文章

  • 昇思25天学习打卡营第21天|基于MobileNetv2的垃圾分类
    基于MobileNetv2的垃圾分类实验目的MobileNetv2模型原理介绍实验环境数据处理数据准备数据加载数据预处理操作MobileNetV2模型搭建MobileNetV2模型的训练与测试训练策略模型训练与测试模型推理导出AIR/GEIR/ONNX模型文件本文档主要介绍垃圾分类代码开发的方法。通过......
  • 记录荒废了三年的四年.net开发的第二次面试(进复试了)
    这次面试的是小公司,深圳计通智能,面试分为初试和复试。使用腾讯视频会议完成。相比与上次面试,这次有所进步,进复试了。当然,这可能也与面试风格有关。这次面试着重与项目经历和技术,因此回答比较顺畅。这一周干了什么我先是研究了上次面试没回答出来,或者回答得不好的技术问题。然后......
  • 类库项目无法引用Microsoft.AspNetCore程序集下的类库
    类库项目无法引用Microsoft.AspNetCore程序集下的类库 在类库项目中不能直接引用WebApplicationBuilder、ApplicationBuilder等类,这些类位于Microsoft.ASPNetCore程序集中,但是无法通过Nuget包引用,因为该Nuget包的版本已经不再支持,很久没有更新过了。解决方法:在项目文件cspr......
  • .NET Core 核心知识点(四) -- 初会依赖注入
    控制反转、服务定位器、依赖注入  控制反转:使用对象或者服务的时候,不需要自己去创建/new服务,而是在使用的时候直接声明,容器会自动分配一个服务实例。相当于自己用发电机发电使用和利用电网公司的电的区别,自己发电,我需要一台发电机,安装发电机,自己设置电压,频率等等,而使用电......
  • VS2022 安装.NET4.5目标包
    转载自https://www.cnblogs.com/Stay627/p/15549958.html[VS2022安装.NET4.5目标包]众所周知VS2022将不再支持.NET4.5,即使在VisualStudioInstaller中也找不到.NET4.5的选项在不改变项目结构的情况下,要么选择继续使用VS2019,当然博主已经卸掉了,那么还有什么方法呢?我们可以......
  • unet网络解析
    Unet网络结构学习记录导入包#!/user/bin/python#coding=utf-8importnumpyasnpimporttorchimporttorch.nnasnn能够访问PyTorch中定义的所有神经网络层(如全连接层、卷积层、池化层等)、损失函数(如交叉熵损失、均方误差损失等)以及激活函数(如ReLU、Sigmoid等importtor......
  • 在.NET MVC 中使用 Quartz.NET 创建可以修改时间的定时任务,并结合 Autofac 进行依赖注
    net4.6.1  nuget包Quartz  3.0Autofac  5.0Autofac.Mvc5 5.0  步骤1:创建Quartz任务首先,创建一个实现 IJob 接口的任务类。这个类将定义你希望定时执行的操作。publicclassMyJob:IJob{publicTaskExecute(IJobExecutionContextcontext)......
  • Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问
    Vue的设置我们创建并启动一个Vue项目,如下所示:打开cmd,输入ipconfig查询本地ip地址:想通过本地ip地址访问,把localhost改成本地ip地址,发现打不开:这是因为Vue项目默认只有localhost,查看启动终端:这时候就需要进行配置,打开package.json,在scripts下的dev中加上--host0.0.0.0:再......
  • .NET8的AOT技术
    AOT技术的好处:提升启动速度;降低发布包的大小;内存占用小;编译为字节码反编译难度加大;  项目配置<PropertyGroup><RuntimeIdentifier>win-x86;win-x64;osx-x64;linux-x64</RuntimeIdentifier><!--根据需要设置--><PublishSingleFile>true</PublishSingleFile><P......
  • 关于学习.NET的历程回顾与今后的探索实践方向
    关于学习.NET的历程回顾自从2023年9月11日注册公众号以来,这次还是第一次介绍自己。我今年24岁,双非本,211硕,非计算机相关专业。大学期间接触过计算机相关的课程可能就《大学生计算机基础》、《C语言程序设计》,并且也没掌握多好。22年4月研究生复试结束,联系好导师后,由于导师研究方......