.NET6打包部署到Windows Service

1.安装Nuget包

安装以下nuget包支持windows service

<PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="6.0.10" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.1" />

2.设置ContentRootPath

不设置ContentRootPath会指向C盘sc.exe所在文件夹。

var options = new WebApplicationOptions
{Args = args,ContentRootPath = WindowsServiceHelpers.IsWindowsService() ? AppContext.BaseDirectory : default
};var builder = WebApplication.CreateBuilder(options);

3.启用WIndowsService

通过以下方法即可启用WIndowsService支持

builder.Host.UseWindowsService();

4.发布项目

右键项目,进行发布,发布到文件夹

432680390134eba3b34e11e65e512a67.png

5.简单安装

通过以下BASH命令,实现安装/开始/停止/删除windows service

安装

set "CDir=%~dp0"
sc.exe create "MyService" start=auto binpath="%CDir%MyService.exe --environment Development"

启动

sc.exe start "MyService"

停止

sc.exe stop "MyService"

删除

sc.exe delete "MyService"

6.安装打包工具

安装Inno Setup打包工具

安装好后,进行汉语支持支持。打开Inno Setup安装目录,默认C:\Program Files (x86)\Inno Setup 6。

复制Default.isl,将其拷贝至C:\Program Files (x86)\Inno Setup 6\Languages文件夹,并重命名为Chinese.isl

将以下内容覆盖到Chinese.isl

; *** Inno Setup version 5.5.0+ Chinese messages ***;; To download user-contributed translations of this file, go to:;   http://www.jrsoftware.org/files/istrans/;; Note: When translating this text, do not add periods (.) to the end of; messages that didn't have them already, because on those messages Inno; Setup adds the periods automatically (appending a period would result in; two periods being displayed).[LangOptions]; The following three entries are very important. Be sure to read and?; understand the '[LangOptions] section' topic in the help file.LanguageName=ChineseLanguageID=$0409LanguageCodePage=0; If the language you are translating to requires special font faces or; sizes, uncomment any of the following entries and change them accordingly.;DialogFontName=;DialogFontSize=8;WelcomeFontName=Verdana;WelcomeFontSize=12;TitleFontName=Arial;TitleFontSize=29;CopyrightFontName=Arial;CopyrightFontSize=8[Messages]; *** Application titlesSetupAppTitle=安装SetupWindowTitle=安装 - %1UninstallAppTitle=卸载UninstallAppFullTitle=%1 卸载; *** Misc. commonInformationTitle=安装信息ConfirmTitle=提示ErrorTitle=错误; *** SetupLdr messagesSetupLdrStartupMessage=现在将安装 %1。是否继续?LdrCannotCreateTemp=不能创建临时文件。安装中止!LdrCannotExecTemp=不能在临时目录中解压文件,安装过程中止!; *** Startup error messagesLastErrorMessage=%1.%n%n 错误 %2: %3SetupFileMissing=在安装目录中找不到文件 %1 。请更正该问题或者获得一个新的文件。SetupFileCorrupt=安装文件被占用。请获得一个新的安装文件。SetupFileCorruptOrWrongVer=安装文件被占用, 或者安装文件的版本不对。请更正该问题或者获得一个新文件。NotOnThisPlatform=该程序不能在 %1 下运行。OnlyOnThisPlatform=该程序必须在 %1 下运行。OnlyOnTheseArchitectures=该程序只能在以下WINDOWS版本下运行:%n%n%1MissingWOW64APIs=该版本需要64位的安装程序。要更正该问题,请安装 Service Pack %1。WinVersionTooLowError=该软件需要 %1 版本号 %2 或者更高。WinVersionTooHighError=该软件不能在 %1 版本号 %2 或者更高版本中安装。AdminPrivilegesRequired=您在安装该程序时必须是管理员权限。PowerUserPrivilegesRequired=您在安装程序是必须是管理员权限或者高权限用户权限。SetupAppRunningError=安装程序检测到 %1 正在运行。%n%n请关闭它的所有实例。然后单击“确认”继续安装,或者单击“放弃”退出。UninstallAppRunningError=卸载程序检测到 %1 正在运行。%n%n请关闭它的所有实例。然后单击“确认”继续安装,或者单击“放弃”退出。; *** Misc. errorsErrorCreatingDir=安装程序不能创建目录 "%1"ErrorTooManyFilesInDir=不能在目录"%1" 下创建文件。因为该目录下有太多的文件了。; *** Setup common messagesExitSetupTitle=退出安装ExitSetupMessage=安装没有完成。 如果您现在退出,程序将不被安装。%n%n您可以下次在完成安装任务。%n%n退出安装?AboutSetupMenuItem=关于安装程序[&A]...AboutSetupTitle=关于安装程序AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4AboutSetupNote=TranslatorNote=; *** ButtonsButtonBack=< 回退[&B]ButtonNext=下一步[&N] >ButtonInstall=安装[&I]ButtonOK=确认ButtonCancel=放弃ButtonYes=市[&Y]ButtonYesToAll=全部确认[&A]ButtonNo=否[&N]ButtonNoToAll=全部否认[&o]ButtonFinish=完成[&F]ButtonBrowse=浏览[&B]...ButtonWizardBrowse=浏览[&r]...ButtonNewFolder=新建文件夹[&M]; *** "Select Language" dialog messagesSelectLanguageTitle=选择安装语言种类SelectLanguageLabel=选择该语言作为安装语言:; *** Common wizard textClickNext=单击“下一步”继续,或者单击“放弃”退出本安装程序。BeveledLabel=BrowseDialogTitle=浏览文件夹BrowseDialogLabel=在下面的列表中选择一个目录, 然后单击“确认”继续。NewFolderName=新文件夹; *** "Welcome" wizard pageWelcomeLabel1=欢迎进入 [name] 安装向导WelcomeLabel2=将在您的电脑上安装 [name/ver] 。%n%n建议在继续安装之前退出其它程序的运行。; *** "Password" wizard pageWizardPassword=密码PasswordLabel1=本安装程序受密码保护。PasswordLabel3=请输入密码,密码区分大小写。然后单击“下一步”继续。PasswordEditLabel=密码[&P]:IncorrectPassword=输入的密码不正确,请重新输入。; *** "License Agreement" wizard pageWizardLicense=用户许可协议LicenseLabel=请在继续之前仔细阅读用户许可协议。LicenseLabel3=请仔细阅读下面的用户许可协议。在继续安装之前,您必须接受该协议。LicenseAccepted=我接受协议[&a]。LicenseNotAccepted=我不接受协议[&d]; *** "Information" wizard pagesWizardInfoBefore=提示InfoBeforeLabel=在继续安装之前请仔细阅读以下重要的信息。InfoBeforeClickLabel=当您准备好继续安装时,单击“继续”。WizardInfoAfter=信息InfoAfterLabel=在继续安装之前请仔细阅读以下重要的信息。InfoAfterClickLabel=当您准备好继续安装时,单击“继续”。; *** "User Information" wizard pageWizardUserInfo=用户信息UserInfoDesc=请输入您的信息。UserInfoName=用户名[&U]:UserInfoOrg=组织[&O]:UserInfoSerial=序列号[&S]:UserInfoNameRequired=您必须输入一个名称。; *** "Select Destination Location" wizard pageWizardSelectDir=选择目标位置SelectDirDesc=您将把[name]安装在哪里?SelectDirLabel3=安装程序将把[name]安装在下面的的文件夹中。SelectDirBrowseLabel=为了继续安装, 请单击“下一步”。如果您想选择一个不同的目录,请单击“浏览”。DiskSpaceMBLabel=为了安装本软件,至少需要 [mb] MB 的空闲磁盘空间。ToUNCPathname=安装程序不能安装到一个 UNC 目录名称。如果您试图网上安装本程序,请映射网络驱动器。InvalidPath=您比如输入一个含盘符的路径名称。比如:%n%nC:\APP%n%n 或者一个网络路径,例如:%n%n\\server\shareInvalidDrive=您选择的磁盘或者网络路径不存在或者不能访问。请重新选择其它的磁盘或者网络路径。DiskSpaceWarningTitle=磁盘空间不足。DiskSpaceWarning=安装程序至少需要 %1 KB 空闲磁盘空间来安装本软件。但是选择的磁盘上只有 %2 KB 空间可用。%n%n 您确认继续?DirNameTooLong=该文件夹的名称太长。InvalidDirName=该文件夹的名字太长。BadDirName32=文件夹名称中不能包括以下的任何字符:%n%n%1DirExistsTitle=文件夹已经存在DirExists=文件夹:%n%n%1%n%n已经存在。您想继续安装?DirDoesntExistTitle=文件夹不存在DirDoesntExist=文件夹:%n%n%1%n%n不存在。您想创建该文件夹?; *** "Select Components" wizard pageWizardSelectComponents=选择部件SelectComponentsDesc=哪些部件需要安装?SelectComponentsLabel2=选择您想要安装的部件; 清除您不想安装的部件。当您准备好后,请单击“下一步” 。FullInstallation=完全安装; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language)CompactInstallation=精简安装CustomInstallation=自定义安装NoUninstallWarningTitle=部件存在NoUninstallWarning=安装程序检测到以下部件已经在您的电脑中被安装了:%n%n%1%n%n不选择它们将不在您的电脑中安装它们。%n%n您想就这样继续吗?ComponentSize1=%1 KBComponentSize2=%1 MBComponentsDiskSpaceMBLabel=当前选择项至少需要 [mb] MB 的空闲磁盘空间才能安装。; *** "Select Additional Tasks" wizard pageWizardSelectTasks=选择一个附加任务SelectTasksDesc=您想选择哪个附加任务?SelectTasksLabel2=选择在安装[name]时执行的附加任务, 然后单击“下一步”。; *** "Select Start Menu Folder" wizard pageWizardSelectProgramGroup=选择开始菜单文件夹SelectStartMenuFolderDesc=您想在哪里放置软件的快捷方式?SelectStartMenuFolderLabel3=安装程序将在下面的文件夹中创建软件的快捷方式。SelectStartMenuFolderBrowseLabel=为了继续,单击“下一步”。如果您想另外选择一个文件夹,单击“浏览”。MustEnterGroupName=您必须输入一个文件夹名称。GroupNameTooLong=文件夹名称或者路径名称太长。InvalidGroupName=文件夹名称非法。BadGroupName=文件夹名字中不能包含下面的字符:%n%n%1NoProgramGroupCheck2=不创建开始菜单中的文件夹[&D]; *** "Ready to Install" wizard pageWizardReady=准备开始安装ReadyLabel1=安装程序开始在您的电脑中安装[name].ReadyLabel2a=单击“安装”开始安装本软件,或者单击“回退”修改安装设置。ReadyLabel2b=单击“安装”开始安装本软件。ReadyMemoUserInfo=用户信息:ReadyMemoDir=安装目标位置:ReadyMemoType=安装种类:ReadyMemoComponents=选中的部件:ReadyMemoGroup=开始菜单文件夹:ReadyMemoTasks=附加任务:; *** "Preparing to Install" wizard pageWizardPreparing=准备安装PreparingDesc=安装程序准备在您的电脑中安装[name]。PreviousInstallNotCompleted=安装/卸载一个以前的程序没有完成。您需要重新启动您的电脑来完成安装工作。%n%n当重新启动您的电脑后,请运行安装程序来完成安装[name]。CannotContinue=安装程序不能继续执行。请单击“放弃”退出。; *** "Installing" wizard pageWizardInstalling=安装中InstallingLabel=安装程序正在安装[name],请等待。; *** "Setup Completed" wizard pageFinishedHeadingLabel=[name]安装完成FinishedLabelNoIcons=安装程序已经在您的电脑中安装了[name]。FinishedLabel=安装程序已经在您的电脑中安装了[name]。要执行本软件,请单击安装好的本软件图标 。ClickFinish=单击“完成”退出本安装程序.FinishedRestartLabel=为了完成[name]的安装, 安装程序必须重新启动您的电脑。您想现在就重新启动?FinishedRestartMessage=为了完成[name]的安装, 安装程序必须重新启动您的电脑。%n%您想现在就重新启动?ShowReadmeCheck=是的,我想查看 README 文件YesRadio=是的,我想重新启动计算机[&Y]NoRadio=不,我将稍后重新启动计算机[&N]; used for example as 'Run MyProg.exe'RunEntryExec=运行 %1; used for example as 'View Readme.txt'RunEntryShellExec=查看 %1; *** "Setup Needs the Next Disk" stuffChangeDiskTitle=安装程序需要下一个安装盘SelectDiskLabel2=请插入安装盘 %1 并且单击“确认”。%n%n如果该盘不是下面显示的盘,请输入正确的路径或者单击“浏览”。PathLabel=目录[&P]:FileNotInDir2=在 "%2" 中没有发现文件。请插入正确的磁盘或者选择其它的文件夹。SelectDirectoryLabel=请输入下一个磁盘中的正确位置。; *** Installation phase messagesSetupAborted=安装没有完成。%n%n请修复错误并重新安装。EntryAbortRetryIgnore=单击“重试”重新尝试,单击“忽略”将继续安装,或者单击“放弃”退出安装。; *** Installation status messagesStatusCreateDirs=创建目录中...StatusExtractFiles=解压文件中...StatusCreateIcons=创建快捷方式中...StatusCreateIniEntries=创建INI单元中...StatusCreateRegistryEntries=创建注册表内容中...StatusRegisterFiles=注册文件中...StatusSavingUninstall=保存卸载信息中...StatusRunProgram=正在完成安装...StatusRollback=恢复原来修改的内容中...; *** Misc. errorsErrorInternal2=内部错误: %1ErrorFunctionFailedNoCode=%1 失败ErrorFunctionFailed=%1 失败; 代码 %2ErrorFunctionFailedWithMessage=%1 错误; 代码 %2.%n%3ErrorExecutingProgram=不能执行文件:%n%1; *** Registry errorsErrorRegOpenKey=在打开注册表键时发生错误:%n%1\%2ErrorRegCreateKey=在创建注册表键时发生错误:%n%1\%2ErrorRegWriteKey=在些注册表键时发生错误:%n%1\%2; *** INI errorsErrorIniEntry=在创建INI文件时发生错误 "%1".; *** File copying errorsFileAbortRetryIgnore=单击“重试”再试一次,单击“忽略”忽略该文件,或者单击“放弃”退出安装程序。FileAbortRetryIgnore2=单击“重试”再试一次,单击“忽略”忽略该文件继续安装,或者单击“放弃”退出安装程序。SourceIsCorrupted=源文件被使用SourceDoesntExist=源文件 "%1" 不存在ExistingFileReadOnly=该已经存在的文件是只读属性。%n%n单击“重试”删除只读属性并重新尝试,单击“忽略”忽略该文件,或者单击“放弃”退出安装程序。ErrorReadingExistingDest=当试图读取一个已经存在的文件时发生了错误:FileExists=该文件已经存在。%n%n您想覆盖它吗?ExistingFileNewer=已经存在的文件比安装程序试图安装的文件要新。建议您保留该文件。%n%n您想保留已经存在的文件吗?ErrorChangingAttr=当试图改变一个存在的文件的属性时发生了错误:ErrorCreatingTemp=当试图在目标目录中创建一个文件时发生了错误:ErrorReadingSource=当试图读取一个文件时发生了错误:ErrorCopying=当试图复制一个文件时发生了错误:ErrorReplacingExistingFile=当试图覆盖已经存在的文件时发生错误:ErrorRestartReplace=重新启动置换失败:ErrorRenamingTemp=当在目标目录中重命名文件时发生错误:ErrorRegisterServer=不能注册 DLL/OCX: %1ErrorRegisterServerMissingExport=没有Dll注册服务库输出ErrorRegisterTypeLib=不能注册以下类型库: %1; *** Post-installation errorsErrorOpeningReadme=当打开 README 文件时发生错误。ErrorRestartingComputer=安装程序不能重新启动电脑。请手动启动。; *** Uninstaller messagesUninstallNotFound=文件 "%1" 不存在。不能卸载。UninstallOpenError=文件 "%1" 不能打开。不能卸载。UninstallUnsupportedVer=卸载记录文件 "%1" 不是基于本安装程序的版本。不能完成软件的删除工作。UninstallUnknownEntry=一个未知的实体 (%1) 存在于卸载记录文件中。ConfirmUninstall=您确定完全删除 %1 和所有基于它上面的部件吗?UninstallOnlyOnWin64=该安装程序只能在64位的Windows上执行卸载工作。OnlyAdminCanUninstall=该安装程序只能在您具有管理员权限时才能执行卸载工作。UninstallStatusLabel= %1 正在被删除,请稍等。UninstalledAll=%1 被成功地从您的电脑中删除。UninstalledMost=%1 删除完成。%n%n有某些部件不能被删除。您可能需要手动删除它们。UninstalledAndNeedsRestart=为了完成 %1 的删除工作, 您必须重新启动电脑。%n%n您想现在就重新启动吗?UninstallDataCorrupted=文件"%1" 被占用。不能完成删除工作。; *** Uninstallation phase messagesConfirmDeleteSharedFileTitle=删除共享程序文件?ConfirmDeleteSharedFile2=系统指出以下的共享程序文件将不再被使用。您是否想删除这些共享文件?%n%n如果这些文件删除后,其他程序仍然要使用它,可能其它程序的功能将受影响。如果您不能肯定,请选择“否”。让这些文件保留在系统中不会对系统造成损害。SharedFileNameLabel=文件名:SharedFileLocationLabel=位置:WizardUninstalling=卸载StatusUninstalling=卸载 %1 中...; The custom messages below aren't used by Setup itself, but if you make; use of them in your scripts, you'll want to translate them.[CustomMessages]NameAndVersion=%1 版本 %2AdditionalIcons=附加图标:CreateDesktopIcon=创建桌面图标[&d]CreateQuickLaunchIcon=创建快速启动图标[&Q]ProgramOnTheWeb=%1 on the WebUninstallProgram=卸载 %1LaunchProgram=执行 %1AssocFileExtension=用文件扩展名 %2 匹配[&A] %1?AssocingFileExtension=正在用文件扩展名 %2 匹配[&A] %1 中...

7.打包

打开Inno Setup,通过右上角File->New新建Inno Setup打包文件。设置应用程序信息

d37f00396ee7733f04752fe3d4f17dee.png

设置安装目录为前面的程序发布目录

13989859ba10c389116cd4c74bc0c6d5.png

添加卸载快捷键

88f64c27d3abbbef333f6ccfa81902c9.png

 设置licence信息

c0ad4f1f65edb87687f080c6dbf595a2.png

 选择安装模式

c951242ea0747957d582eeefc9b64e37.png

 选择汉化语言

f1e9535ff224d3631386661d5f7982d3.png

 设置输出目录

ade70bfcf572bf713d37f82638f2c386.png

 脚本中添加安装命令,卸载命令

[Run]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "create MyService start=auto binPath=""{app}\MyWeb.exe""" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "start MyService" ; Flags: runhidden[UninstallRun]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden

脚本最终内容

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!#define MyAppName "MyService"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "https://www.example.com/"[Setup]
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{0C9603FD-2587-41FD-A532-CB5294E7B56E}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={autopf}\{#MyAppName}
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
LicenseFile=D:\Mylicence.txt
InfoBeforeFile=D:\Myshowafter.txt
InfoAfterFile=D:\Myshowbefore.txt
; Uncomment the following line to run in non administrative install mode (install for current user only.)
;PrivilegesRequired=lowest
OutputDir=C:\Users\c\Desktop
OutputBaseFilename=mysetup
Compression=lzma
SolidCompression=yes
WizardStyle=modern[Languages]
Name: "chinese"; MessagesFile: "compiler:Languages\Chinese.isl"[Files]
Source: "D:\MyWeb\bin\Release\net6.0\publish\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"[Run]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "create MyService start=auto binPath=""{app}\MyWeb.exe""" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "start MyService" ; Flags: runhidden[UninstallRun]
Filename: "{sys}\sc.exe"; Parameters: "stop MyService" ; Flags: runhidden
Filename: "{sys}\sc.exe"; Parameters: "delete MyService" ; Flags: runhidden

8.打包编译

点击编译按钮,打包好后,双击exe安装

a05e25ee94fce4327d07a9363412d553.png

9.检验安装

首先去windows 服务查看是否安装成功

8be7e9feba4620da9509af6579b3f8a0.png

然后访问服务

0c20282ee5ae545bbebb16e85ad8a30d.png

 至此打包安装完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android emoji unicode编码表,unicode编码

unicode编码app是一款字符查找客户端应用&#xff0c;通过unicode编码可以方便寻找特定字符&#xff0c;查看字符表情详细的描述&#xff0c;并且利用unicode编码就可以快捷复制任意unicode编码&#xff0c;提高开发效率&#xff0c;非常的实用&#xff0c;快来下载unicode编码…

物联网商机诱人 芯片商大力搭建生态系统

应用需求变化多端的物联网&#xff0c;虽具备庞大的发展潜力及应用商机&#xff0c;但由于市场过于分散&#xff0c;几乎没有杀手应用可言&#xff0c;因此对有意耕耘相关市场的半导体业者而言&#xff0c;如何借力使力&#xff0c;寻找盟友共同搭建出的生态系统&#xff0c;遂…

ASP.NET Core 6框架揭秘实例演示[30]:利用路由开发REST API

借助路由系统提供的请求URL模式与对应终结点之间的映射关系&#xff0c;我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理。ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的&#xff0c;它们在ASP.NET平台上具有举足轻…

数据库(二)tab补全功能,使数据库支持简体中文,日志管理,备份脚本

一、如何在MySQL数据库中使用tab键补全功能 1.修改主配置文件/etc/my.cnf vim /etc/my.cnf [mysql] #no-auto-rehash auto-rehash 2.重启MySQL服务&#xff0c;登录测试 /etc/init.d/mysqld restart mysql -uroot -p (可在数据库中使用tab键&#xff09; 3.&#xff1b;临时支持…

企业数字化转型服务+方案

前言&#xff1a;本文的阅读对象是公司老板、或企业高层管理者&#xff01;1【背景介绍】数字经济与实体经济深度融合是助推我国经济高质量发展的重要环节。为加快数字中国建设&#xff0c;中央和地方政府都出台各类政策扶植数字化转型相关项目。马云在接受采访时也提到&#x…

.NET性能优化-使用ValueStringBuilder拼接字符串

前言这一次要和大家分享的一个Tips是在字符串拼接场景使用的&#xff0c;我们经常会遇到有很多短小的字符串需要拼接的场景&#xff0c;在这种场景下及其的不推荐使用String.Concat也就是使用运算符。 目前来说官方最推荐的方案就是使用StringBuilder来构建这些字符串&#xff…

STOLUCK:经济下行的当下 ,STO或将帮助中小企业度过寒冬

2018年被称为创业阵亡率特别高的一年&#xff0c;相关报道称有近20%的创业团队面临“后续融资跟不上&#xff0c;可能死在春天来临之前”的窘境。经济不景气的当下&#xff0c;上下游资金不足&#xff0c;信贷机构没钱&#xff0c;风投业捉襟见肘。实际今年3月份开始&#xff0…

浅析C# Dictionary实现原理

一、前言二、理论知识1、Hash 算法2、Hash 桶算法3、解决冲突算法三、Dictionary 实现1. Entry 结构体2. 其它关键私有变量3. Dictionary - Add 操作4. Dictionary - Find 操作5. Dictionary - Remove 操作6. Dictionary - Resize 操作(扩容)7. Dictionary - 再谈 Add 操作8. C…

猫晚流量再创记录,阿里云直播方案护航优酷2500万用户体验

2019独角兽企业重金招聘Python工程师标准>>> 对“剁手党而言&#xff0c;天猫双11早已经超越了简单的“买买买”&#xff0c;更是一场边看边玩的狂欢盛宴。今年的天猫双11狂欢夜晚会&#xff08;简称“猫晚”&#xff09;在上海举办&#xff0c;这台兼具年轻潮流与国…

python实现二叉树和它的七种遍历

介绍&#xff1a; 树是数据结构中非常重要的一种&#xff0c;主要的用途是用来提高查找效率&#xff0c;对于要重复查找的情况效果更佳&#xff0c;如二叉排序树、FP-树。另外可以用来提高编码效率&#xff0c;如哈弗曼树。 代码&#xff1a; 用python实现树的构造和几种遍历算…

.NET性能系列文章二:Newtonsoft.Json vs System.Text.Json

微软终于追上了&#xff1f;图片来自 Glenn Carstens-Peters[1]Unsplash[2]欢迎来到.NET 性能系列的另一章。这个系列的特点是对.NET 世界中许多不同的主题进行研究、基准和比较。正如标题所说的那样&#xff0c;重点在于使用最新的.NET7 的性能。你将看到哪种方法是实现特定主…

android gpu平板 推荐,性能强的不像话,最强安卓平板华为平板M6上手

原标题&#xff1a;性能强的不像话&#xff0c;最强安卓平板华为平板M6上手你为什么买平板电脑&#xff1f;当这一问题问出以后&#xff0c;许多朋友的表情都很微妙&#xff0c;随后大概率的回答则相当统一&#xff1a;"我买平板干嘛&#xff1f;"。其实得到这样一个…

企业应用“数据优先”革命的下一个主战场:安全与运营

根据IDC发布的2015年全球CIO日程预测&#xff0c;80%的CIO将提供一个实现创新和改善业务决策的新体系架构。 大数据时代&#xff0c;企业软件市场正在经历一次大迁移&#xff0c;数以十亿计的企业IT支出预算将投向“数据优先”应用&#xff0c;而不是长久以来以业务流程和工作流…

给Web开发人员的以太坊入坑指南

以太坊现在各种学习资料数不胜数&#xff0c;但由于以太坊正处于飞速发展阶段&#xff0c;有些学习资料很快就过时了。所以想找到有价值的资料无异于大海捞针。我费了很大功夫&#xff0c;才建立起对以太坊的整体认识&#xff0c;搞清楚它的工作机制。我相信很多跃跃欲试的开发…

一款简单的缩放拖拽图片控件

本文介绍一个针对 .NET 桌面应用程序的独立图片缩放拖拽显示控件 SQPhoto[1]。SQPhoto 是一个 Windows 桌面应用的组件&#xff0c;支持 .NET6 和 .NET Framework 4.6 。基于 PictureBox 的图片展示工具&#xff0c;增加了拖动和缩放功能&#xff0c;便于在某些场景下的图片展…

HTML怎么让div全透明,设置div为透明 怎样才让div里面的div不透明?

#a{ background:#FFCC33; filter:alpha(opacity:0); width: 300px; heig#a{background:#FFCC33; filter:alpha(opacity50); /*支持 IE 浏览器*/-moz-opacity:0.50; /*支持 FireFox 浏览器*/opacity:0.50; /*支持 Chrome, Opera, Safari 等浏览器*/width: 300px;height:300px;}还…

html overflow 样式,css样式之overflow-x属性样式

overflow-x是overflow子花样&#xff0c;平日也很少用的。overflow-x设置匿伏溢出过宽模式(比如过宽图片)、设置对象底部转折条等重要。overflow-x语法与根本懂得1、overflow-x可设置值overflow-x : visible | auto | hidden| scroll值与解释引见&#xff1a;visible :  不剪切…

C# WPF GridControl用法举例

概述GridControl是Dev中的表格控件&#xff0c;类似于Winfrom中的DataGridView&#xff0c;以及WPF中的DataGrid&#xff0c;但是这个控件功能比原生的功能要强大很多&#xff0c;下面用实例举例说明此控件的用法.代码前台XAML&#xff1a;<UserControl x:Class"Calibu…

js中关于Blob对象的介绍与使用

js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js中的一个对象&#xff0c;里面可以储存大量的二进制编码格式的数据。 创建blob对象 创建blob对象本质上…

20170102-文件处理

文件处理 正常文件处理 python 文件处理 编码 f open(file"兼职白领学生空姐模特护士练习方式.txt",mode"r",encoding"utf-8")#把值附给变量f &#xff08;路径file"文件是兼职白领学生空姐模特护士练习方式.txt"&#xff0c;文本模式…