王者荣耀点券修改器下载地址: https://bj.bcebos.com/wzryxgq.apk
各位游戏大佬大家好,今天小编为大家分享关于GG修改器有无root版本_gg修改器免root版中文版的内容,轻松修改游戏数据,赶快来一起来看看吧。
本文地址:https:///Jack-Blog/p/11108136.html
作者博客:杰哥很忙
目的
本章文章主要是通过调用svn客户端命令和powershell脚本实现完全无需人工干预自动生成版本号。
详细流程
若程序需要定义版本号,则可以将版本号记录在程序集的AssemblyInfo.cs文件中
[assembly: AssemblyVersion(“1.0.0”)]
[assembly: AssemblyFileVersion(“1.0.0”)]
也可以在程序集右键选择属性(或者通过快捷键Alt + Enter),在Application点击Assembly Infomation…按钮修改程序集版本号和文件版本号。
AssemblyVersion是程序集的版本,.NET的CLR用于标识出该dll的版本信息,用于定义强名称的版本号,该版本号每一位最大为16位长度,即最大为65535,超过时编译不通过。
AssemblyFileVersion是文件版本号,仅仅是文件版本号,给人看的,没有实际什么作用,也没有长度限制。
获取SVN Reversion
我们规定程序的版本号为需求版本号1.0.0加上SVN的Reversion做为修订号。这样就能直接关联上该程序集是哪个版本的代码。
关于修订号,在《TortoiseSVN》文档中有相关的说明。我看的是《TortoiseSVN 1.8.10》的文档,在第五章介绍了SubWCRev程序。通过SubWCRev程序可以执行关键字$WCREV$替换。同时我们需要提供一个版本号模板文件,通过替换版本号模板文件的关键字生成我们需要的版本号文件。
首先我们根据程序集下AssemblyInfo.cs文件复制出一个AssemblyInfo.template.cs文件。
由于我们仅仅是为了修改版本号信息,后面就称之为版本号模板文件。
然后将其[assembly: AssemblyFileVersion(“1.0.0.0”)]修改为[assembly: AssemblyFileVersion(“1.0.0.$WCREV$”)]。这样我们就可以通过SubWCRev程序替换修订号。
由于AssemblyVersion有大小限制,不允许超过65535,而SVN修订号很有可能会超过该值,因此CLR的程序集版本号不用改修订号。只需要修改文件版本号即可。
由于在编译时,VS会编译AssemblyInfo文件提取出程序集信息放入到程序集内。我们直接复制出来的版本号模板文件默认也会进行编译。而我们创建的版本号模板文件用于生成版本号文件,无需编译。我们需要的是通过版本号模板文件生成版本号文件,即通过AssemblyInfo.template.cs生成AssemblyInfo.cs。因此在版本号模板文件右键属性中将Build Action从Compile修改为None。
此时我们已经有了版本号模板文件,接下来要做的是在编译的之前先根据版本号模板文件创建我们需要的版本号文件。
VS编译的时候提供了编译前预处理功能和编译后处理功能。在程序集属性中,我们选择Build Event里面有Pre-build mand line,通过在里面输入指令可以实现在编译前执行我们想要的命令。
同时VS内部也提供了一些宏指令供我们使用,通过点击Edit Pre-build按钮,会弹出一个编辑框
点击Macros可以查看所有VS支持的宏指令
SubWCRev程序命令格式为SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe],WorkingCopyPath为SVN的工作副本,SrcVersionFile为原始版本文件,即版本模板文件。DstVersionFile为替换关键子后保存的版本文件。
在VS环境变量中我们可以通过$(ProjectDir)获取到当前程序集路径,通过$(SolutionDir)获取到解决方案路径。
宏指令为$(指令名)格式
在预编译事件中输入以下指令SubWCRev $(SolutionDir) $(ProjectDir)PropertiesAssemblyInfo.template.cs $(ProjectDir)PropertiesAssemblyInfo.cs即可在编译前获取到SVN的reversion填充到修订号中。
编译后可以在输出窗口看到关键字替换的信息
1>—— Build started: Project: FGMain, Configuration: Debug Any CPU ——
1> SubWCRev: ’F:工作SVNPlatform runkFGMainFGMain’
1> mitted at revision 100268
1> Mixed revision range 100267:100268
1> Local modifications found
1> Unversioned items found
获取需求号
在实际工作中,我们每次发版都会有一个需求版本号。当产生需求时整个版本都会使用这个版本号。因此我们可以在开发的时候就在开发分支上创建该版本号的需求分支。分支名称以版本号命名,这样程序就可以获取到URL的版本号信息填充到版本号模板号模板文件中。而省去了人为修改版本号的麻烦。
比如当前版本号为1.32.0,则在SVN程序的分支上创建一个1.32.0的版本。branches/FGMain/1.32.0。
接下来在我们使用SubWCRev程序关键字替换之前需要先获取到分支的版本号填充到版本号模板文件中。这样在编译前就会将版本号和SVN的修订号一同生成。
我们还需要提前判断当前SVN工作目录是否有修改,只有在工作目录有修改时,才需要更新版本号,工作目录没有修改时,则无需修改版本号。
当我们安装了SVN客户端后(同时需要选择安装命令行工具),我们可以通过SVN执行执行命令,通过SVN help查看支持的所有参数。
SVN客户端安装时需要勾选命令行工具,如下截图
获取版本号
我们需要获取url的版本号。而版本号只有在分支目录上才有,因此我们可以通过正则解析以下url,提取版本号。若提取不到则无需执行后续逻辑
通过svn info获取当前目录的svn信息,通过svn info 路径获取指定路径的svn信息。
F:工作SVNPlatform runkFGMain>svn info
Path: .
Working Copy Root Path: F:工作SVNPlatform runkFGMain
URL: http://inner.:81/ATS_Code/Platform/branches/FGMain/1.32.0
Relative URL: ^/Platform/branches/FGMain/1.32.0
Repository Root: http://inner.:81/ATS_Code
Repository UUID: 2fd9d0ce-2897-f849-b9e2-af1303b08de7
Revision: 99512
Node Kind: directory
Schedule: normal
Last Changed Author: wish
Last Changed Rev: 99512
Last Changed Date: 2019-06-14 17:54:47 +0800 (周五, 14 6月 2019)
命令会返回多行信息,我使用的时SVN 1.11 版本的客户端,其他版本可能会有不同。我们解析第二行的URL从而解析出URL的版本号。
$svnInfo = svn info $projectDir
$urlInfo = $svnInfo[2]
$url = $urlInfo.Replace(“URL: “,””);
$urlMatchStr= ’branches/(.*?)/(.*?)/(.*?)’
if($url -notmatch $urlMatchStr)
{
# 主线不再处理
Write-Host “$url not match $urlMatchStr”
return
}
这里需要注意由于我们当前目录不一定就是解决方案目录,在VS中我们实在解决方案调用的编译工作,但是在jenkins我们的目录可能会是bin/release或bin/debug,因此匹配URL时需要用非贪婪匹配。这样无论路径为branches/FGMain/1.32.0/FGBussness还是branches/FGMain/1.32.0/FGMain/bin/Debug 第二项都可以匹配到版本号。
现在同$matches[2]即可获取到我们获取到的版本号。
获取当前工作副本状态
当获取到版本号时,表明当前实在分支目录,则需要判断工作副本是否有修改。有修改则需要更新版本号。通过svn status 查看路径的svn状态,通过svn status 路径可以查看指定路径的SVN状态。
PS F:工作SVNPlatform runkFGMain> svn status FGBussness
? FGBussnessFGClientBussness.csproj.user
M FGBussnessMainWorkServer.cs
? FGBussnessapp.config
? FGBussnessin
命令返回了一个集合,每一行是一个文件或文件夹的SVN状态。SVN共包含以下状态
可以看到” “、”X”、”?”可以认为是本地无修改。其他状态都有修改,需要更新版本号。当有冲突时,编译也会出错,同时编辑完冲突有可能就没有修改了,因此状态为”C”时也认为时无修改。
$svnStatuses = svn status $projectDir
#遍历每个文件状态
foreach($svnStatus in $svnStatuses)
{
$status = $svnStatus.SubString(0,1)
if(($status -ne ” “) -and ($status -ne “X”) -and ($status -ne “?”) -and ($status -ne “C”))
{
#存在编辑
Write-Host $svnStatus.SubString(1).Trim()”Modified”
$modified = $true
break
}
}
通过$modified记录当前工作副本的是否修改。同时只要一个文件修改了就无需判断其他文件。
更新版本号模板
接下来我们读取版本号模板文件,首先我们需要确认一下VS保存的文件编码,我们按照VS的编码读取并保存文件。
在文件-高级保存选项中可以看到设置的文本编码
$versionContent = Get-Content $versionFile -encoding UTF8
for($count = 0 ; $count -lt $versionContent.Length; $count++)
{
if(($versionContent[$count] -match ’[assembly: AssemblyVersion(“(d*
.d*.d*)”)]’) -or
($versionContent[$count] -match ’[assembly: AssemblyFileVersion(“(d*.d*.d*).$WCREV$”)]’))
{
#版本号不一致则更新版本号
if($matches[1] -ne $marjorVersion)
{
Write-Host “Change Version”$matches[1]”To $marjorVersion”
$versionContent[$count] = $versionContent[$count] -replace $matches[1],$marjorVersion
}
continue
}
}
d*.d*.d*匹配3位版本号,如1.32.0
遍历文件的每一行进行匹配,若匹配上了则将匹配的版本号替换为新的版本号。
最后更新版本号模板文件
Set-Content $versionContent -Path $versionFile -encoding UTF8
同时由于我们程序只能获取一个程序集当作整个程序的版本号,因此我们每次编译的时候可以将启动项强制更新版本号。我们可以添加一个$force 当设置为true的时候不管本地是否有修改都更新版本号。
完整的脚本如下:
param([string] $projectDir,[string]$versionFile, $force)
Write-Host “current path:”$projectDir
try
{
# 指定路径
$svnInfo = svn info $projectDir
$urlInfo = $svnInfo[2]
$url = $urlInfo.Replace(“URL: “,””);
Write-Host “url:$url”
$urlMatchStr= ’branches/(.*?)/(.*?)/(.*?)’
if($url -notmatch $urlMatchStr)
{
# 主线不再处理
Write-Host “$url not match $urlMatchStr”
return
}
# 分支
# PS F:工作SVNPlatform runkFGMain> $matches
# Name Value
# —- —–
# 3 FGBussness
# 2 1.32.0
# 1 FGMain
# 0 branches/FGMain/1.32.0/FGBussness
$marjorVersion = $matches[2]
Write-Host “Current Working Copy Version:$marjorVersion”
# 没有强制修改,则需要判断当前工作路径是否编辑过。
$modified = $force
if($modified)
{
Write-Host “Force Modified”
}
else
{
#当路径含有中文时,参数传入会乱码。暂时获取当前路径状态
$svnStatuses = svn status $projectDir
#遍历每个文件状态
foreach($svnStatus in $svnStatuses)
{
$status = $svnStatus.SubString(0,1)
if(($status -ne “X”) -and ($status -ne “?”))
{
#存在编辑
Write-Host $svnStatus.SubString(1).Trim()”Modified”
$modified = $true
break
}
}
}
# 若当前工作目录没有修改过的文件则无需修改版本号
# 查找模板文件的路径
if($modified)
{
Write-Host “Version File :$versionFile”
$versionContent = Get-Content $versionFile -encoding UTF8
for($count = 0 ; $count -lt $versionContent.Length; $count++)
{
if(($versionContent[$count] -match ’[assembly: AssemblyVersion(“(d*.d*.d*)”)]’) -or
($versionContent[$count] -match ’[assembly: AssemblyFileVersion(“(d*.d*.d*).$WCREV$”)]’))
{
#版本号不一致则更新版本号
if($matches[1] -ne $marjorVersion)
{
Write-Host “Change Version”$matches[1]”To $marjorVersion”
$versionContent[$count] = $versionContent[$count] -replace $matches[1],$marjorVersion
}
continue
}
}
# 编辑过则将模板的版本号替换掉
# 在VS的菜单-文件-高级保存选项中默认的文件编码是使用UTF8 With BOM的格式
Set-Content $versionContent -Path $versionFile -encoding UTF8
}
else
{
Write-Host “No Modified”
}
}
catch
{
$Error
}
设置编译前读取版本号
脚本编写好,我们将脚本放到项目根目录下,这样所有的程序集都能通过解决文件夹获取到该脚本。
powershell -ExecutionPolicy Bypass -NoProfile -NonInteractive -File $(SolutionDir)Update-Version.ps1 $(ProjectDir) $(ProjectDir)PropertiesAssemblyInfo.template.cs
在Pre-build mand line 添加以上命令调用更新版本号的脚本。
现在完整的Pre-build命令如下
powershell -ExecutionPolicy Bypass -NoProfile -NonInteractive -File $(SolutionDir)Update-Version.ps1 $(ProjectDir) $(ProjectDir)PropertiesAssemblyInfo.template.cs
SubWCRev $(SolutionDir) $(ProjectDir)PropertiesAssemblyInfo.template.cs $(ProjectDir)PropertiesAssemblyInfo.cs
若启动项默认需要强制更新版本号,则使用以下命令
powershell -ExecutionPolicy Bypass -NoProfile -NonInteractive -File $(SolutionDir)Update-Version.ps1 $(ProjectDir) $(ProjectDir) $true
若当前版本文件的版本号为1.31.0,在1.32.0的分支上进行编译,则会在输出窗口输出以下日志
1>—— Build started: Project: FGMain, Configuration: Debug Any CPU ——
1> current path: F:工作SVNPlatform runkFGMainFGMain
1> url:http://124.160.27.118:81/ATS_Code/Platform/branches/FGMain/1.32.0/FGMain
1> Current Working Copy Version:1.32.0
1> Force Modified
1> Version File :F:工作SVNPlatform runkFGMainFGMainPropertiesAssemblyInfo.template.cs
1> Change Version 1.31.0 To 1.32.0
1> Change Version 1.31.0 To 1.32.0
…
总结
在脚本编写的时候遇到了以下错误
以上就是关于GG修改器有无root版本_gg修改器免root版中文版的全部内容,游戏大佬们学会了吗?
如何启动gg修改器root_gg修改器开启教程 分类:修改器 15,505人在玩 各位游戏大佬大家好,今天小编为大家分享关于如何启动gg修改器root_gg修改器开启教程的内容,轻松修改游戏数据,赶快来一起来看看吧。 垃圾标记算法 垃圾回收算法 major gc、mini ……
下载gg修改器上root在哪弄,下载一个简单易用的gg修改器root工具 分类:修改器 14,184人在玩 如果你是一位游戏玩家,你可能不会陌生于gg修改器这个神奇的工具。但是,在使用gg修改器进行一些骚操作之前,你需要先获取root权限。 什么是root权限? 在Android系统中,root权限……
下载gg修改器如何root获取,下载GG修改器软件,轻松Root获取 分类:修改器 13,341人在玩 GG修改器是一款非常流行的工具,可以帮助用户快速修改游戏、应用程序中的数值。要使用该工具,需要先root安卓设备。本文介绍了如何使用GG修改器软件进行root获取,并且对其进行夸赞……
下载gg修改器怎样获取root,下载一个神奇的软件,轻松获取root权限GG修改器 分类:修改器 12,818人在玩 在安卓手机上获取root权限是很多用户都想要实现的目标,因为只有获得root权限,才能让手机发挥出更强大的性能。而在这方面,GG修改器无疑是一款非常强大的工具,它可以让你轻松地获……
下载如何root权限gg修改器_gg修改器要root权限怎么办 分类:修改器 14,296人在玩 各位游戏大佬大家好,今天小编为大家分享关于如何root权限gg修改器_gg修改器要root权限怎么办的内容,轻松修改游戏数据,赶快来一起来看看吧。 本文以工程libtest为例来说明用gcc创……
下载gg修改器怎么下root,软件推荐:GG修改器助您轻松获取ROOT权限! 分类:修改器 11,464人在玩 如果您是一名Android手机用户,想要获取更高的权限操作您的手机,那么您必须要获得ROOT权限。然而,对于大多数普通用户来说,如何获取ROOT权限并不是一件容易的事情。但是,在这里……
下载gg修改器手机版怎么免root,下载GG修改器手机版,告别Root限制 分类:修改器 13,887人在玩 如果你是一个游戏爱好者,那么你一定知道GG修改器的作用。这个工具可以让你在游戏中获得更多的优势,快速通关等。但是,这个工具需要root权限才能使用,对于很多没有root的用户来说……
下载gg修改器免root框架手机版,下载一个神奇的软件:gg修改器免root框架手机版 分类:修改器 14,031人在玩 如果你是一位玩家,那么你可能会遇到这样的问题:想要在游戏中获得更高的分数或更多的金币,但却苦于自己技术不够好或者缺少足够的资源。这时候,你就需要一个能够帮助你修改游戏数……
下载gg大修改器免root,下载GG大修改器免ROOT,让你轻松游戏 分类:修改器 13,095人在玩 如果你是一名喜欢玩手机游戏的玩家,你一定知道有些游戏需要ROOT权限才能使用GG大修改器进行修改。但是,不是所有人都会ROOT手机,或者因为种种原因不想ROOT手机。现在,有了GG大修……
下载gg修改器无需root版_gg修改器无需root版中文 分类:修改器 15,629人在玩 各位游戏大佬大家好,今天小编为大家分享关于gg修改器无需root版_gg修改器无需root版中文的内容,轻松修改游戏数据,赶快来一起来看看吧。 iPhone:不用越狱,但设置略复杂 准备工……
下载