bat脚本:生成项目并自动加壳发布


C# 全选
@echo off

:: 参考:https://blog.csdn.net/weixin_41045657/article/details/118058262
:: 设置操作   Build 编译;Clean清理;Rebuild 重新编译详见(https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild-command-line-reference?view=vs-2019)

:: 解决方案名称
set slnName="YESWEB.Core.sln"

:: MSBuild.exe程序
set ms="C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\MSBuild.exe"

set _alllist=(YESWEB.Core,YESWEB.EFCore.BulkExtensions,YESWEB.DB.System,YESWEB.ServerCore,YESWEB.DB.Business,YESWEB.ServerAuthorize,YESWEB.DB.DocNos,YESWEB.ServerLibs,YESWEB.DocNoProvider)

::设置日志等级
::Diagnostic 	4  诊断详细级别,它显示所有错误、警告、消息,状态事件以及生成摘要。
::Detailed    	3  详情详细级别,它显示	   错误、警告、MessageImportance 值为 High 或 Normal 的消息、所有状态事件以及生成摘要。
::Normal    	2  普通详细级别,它显示    错误、警告、MessageImportance 值为 High 的消息、一些状态事件以及生成摘要。
::Minimal    	1  最小详细级别,它显示    错误、警告、MessageImportance 值为 High 的消息以及生成摘要。
::Quiet    		0  静默详细级别,它显示生成摘要。

ECHO 当前VS的版本对应的MSBuild.exe程序路径:%ms%

:OP
@ECHO.
echo 你是否使用这个版本的MSBuild.exe来编译当前程序?如果不需要编译,请关闭此窗口。
echo,&&echo     1:一键 编译,加密,Nuget打包
echo,&&echo     2:Release编译项目
echo,&&echo     3:加密Release dll
echo,&&echo     4:不编译,打包 Nuget
echo,&&echo     5:清理解决方案
echo,&&echo     6:清理Nuget
echo,&&echo     7:发布Nuget包
echo,&&echo     0:退出
echo;
set buildType=0
set /p buildType= 输入任务编号[0] :

echo %buildType%
IF /I "%buildType%"=="1" (echo 1) ELSE (echo not 1)


IF /I "%buildType%"=="1" GOTO RunAll
IF /I "%buildType%"=="2" GOTO BuildRelease
IF /I "%buildType%"=="3" GOTO EncryptionRelease
IF /I "%buildType%"=="4" GOTO NugetRelease
IF /I "%buildType%"=="5" GOTO Clean
IF /I "%buildType%"=="6" GOTO CleanNuget
IF /I "%buildType%"=="7" GOTO Publish
IF /I "%buildType%"=="0" GOTO End


:RunAll
goto Clean

:Clean
@ECHO.
echo 正在清理 %slnName% ......
%ms% %slnName% /t:Clean
echo 清理完成
@ECHO.
IF /I "%buildType%"=="1" (GOTO BuildRelease) ELSE (goto OP)

:BuildRelease
@ECHO.
echo 正在启动Release模式编译 %slnName% ......
%ms% %slnName% /t:Build -p:Configuration="Release" -fileLoggerParameters:FileLogger,Microsoft.Build;logfile=MyLog.Release.log;append -verbosity:Minimal || GOTO ER
echo 编译完成
@ECHO.
IF /I "%buildType%"=="1" (GOTO EncryptionRelease) ELSE (goto OP)


:: 加密方式
:EncryptionRelease
@ECHO.
set rootSource=.\release
set rootSecure=.\_Secure
echo 正在对%slnName% 项目dll进行加密 ......
::echo 删除pdb
::del %rootSource%\*.pdb || echo '删除目录失败:%rootSource%'
echo 清空目录 %rootSecure%
rd /s /q %rootSecure% 
REM dotNET_Reactor -file "%rootSource%\YESWEB.Core.dll" -necrobit 1 -control_flow_obfuscation 9 -targetfile ".\_Secure\YESWEB.Core.dll"
REM dotNET_Reactor -file "%rootSource%\YESWEB.EFCore.BulkExtensions.dll" -necrobit 1 -control_flow_obfuscation 9 -targetfile ".\_Secure\YESWEB.EFCore.BulkExtensions.dll"

:: 不能启用necrobit,不然生成的类属性,无法复制,.net core中属性get会直接返回null
for %%I in %_alllist% do (
	dotNET_Reactor -file "%rootSource%\%%I.dll" -control_flow_obfuscation 1 -flow_level 9 -targetfile ".\_Secure\%%I.dll"
)
move /y %rootSecure%\*.dll %rootSource%\ 
echo 加密完成
@ECHO.
IF /I "%buildType%"=="1" (GOTO CleanNuget) ELSE (goto OP)

:CleanNuget
@ECHO.
echo 正在删除缓存...
del /Q .\Nupkgs\*.*
echo 删除缓存完成
@ECHO.
IF /I "%buildType%"=="1" (GOTO NugetRelease) ELSE (goto OP)

:NugetRelease
@ECHO.
echo 正在进行打包...
for %%I in %_alllist% do (
	dotnet pack --no-build .\%%I\%%I.csproj -c Release --output .\Nupkgs
)
REM dotnet pack --no-build .\YESWEB.Core\YESWEB.Core.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.EFCore.BulkExtensions\YESWEB.EFCore.BulkExtensions.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.DB.System\YESWEB.DB.System.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.ServerCore\YESWEB.ServerCore.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.DB.Business\YESWEB.DB.Business.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.ServerAuthorize\YESWEB.ServerAuthorize.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.DB.DocNos\YESWEB.DB.DocNos.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.ServerLibs\YESWEB.ServerLibs.csproj -c Release --output .\Nupkgs
REM dotnet pack --no-build .\YESWEB.DocNoProvider\YESWEB.DocNoProvider.csproj -c Release --output .\Nupkgs
echo 打包完成
@ECHO.
goto OP


:Publish
@ECHO.
set nuget="E:\OneDrive\Nuget\NuGet\nuget.exe"
set nuget_Key="---------"
set nuget_url="https://www.nuget.org"
echo 正在进行发布...
dotnet nuget push .\Nupkgs\*.nupkg -k %nuget_Key% -s %nuget_url%
echo 发布完成
@ECHO.
GOTO End

:End
@ECHO.
PAUSE
@ECHO ON
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:批处理nuget上传包脚本
下一篇:DevExpress 设置DateEdit显示年月
评论列表

发表评论

评论内容
昵称:
关联文章

bat脚本生成项目自动发布
Visual Studio(VS)发布自动使用Net Reactor给生成的DLL
基础字典管理功能开发-表结构设计,模型更新和数据库迁移脚本生成
简单制作一个NPM包发布到www.npmjs.com
利用代码生成工具Database2Sharp生成ABP VNext框架项目代码
SSL证书:Certify工具自动注册管理免费的 Let's Encrypt Https证书
Roslyn+T4+EnvDTE项目完全自动化(1) ——类自动生成界面
YESWEB开发框架API无法生成迁移脚本
YESWin Winform开发框架 项目初始化配置运行
JocPlanTask 新建计划项目添加引用
CEFSharp致性JS脚本获取返回数据
根据数据库生成表模型和实体
手把手教你学Dapr - 6. 发布订阅
CMS v3.5升级.Net 6免费下载
.NET 微服务——CI/CD(1):Jenkins+Gitee自动构建
JocPlanTask 测试运行任务
.NET中大型项目开发必备(10)--图片的裁剪、缩放、与水印
YES-CMS 内容管理系统 快速发布与部署
GZUpdate自动升级程序客户端演示
[.Net] .NET Reactor授权方法 .NET Reactor自定义注册机和获取机器码

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码