2024-12-20 00:14:33 +00:00
using ExtendUI.FTPManager ;
using ryCommon ;
2020-12-07 09:02:11 +00:00
using ryCommonDb ;
using System ;
using System.Collections.Generic ;
2020-12-05 09:07:52 +00:00
using System.ComponentModel ;
2024-12-20 06:14:48 +00:00
using System.ComponentModel.Design ;
2020-12-10 09:15:52 +00:00
using System.Data ;
2020-12-05 09:07:52 +00:00
using System.Diagnostics ;
2020-12-07 09:02:11 +00:00
using System.Linq ;
2024-12-20 06:14:48 +00:00
using System.Runtime.ConstrainedExecution ;
2020-12-07 09:02:11 +00:00
using System.Text ;
2020-12-05 09:07:52 +00:00
using System.Windows.Forms ;
2020-12-07 09:02:11 +00:00
using System.Xml ;
2024-12-20 06:14:48 +00:00
using System.Xml.Linq ;
2020-12-07 09:02:11 +00:00
namespace 开 发 辅 助 工 具 .Manager
{
class RyProject
{
/// <summary>
/// C#基准项目路径
/// </summary>
public string CshapeBasePath { get ; private set ; } = "" ;
/// <summary>
/// 引用dll文件夹列表
/// </summary>
public string ReferenceDllPath { get ; private set ; } = "" ;
/// <summary>
/// 是否将dll复制到Bin目录, 并修改引用
/// </summary>
public bool CopyDllToBin { get ; set ; } = false ;
/// <summary>
/// Bin目录相对于项目文件所在的位置,可使用相对路径或绝对路径
/// </summary>
public string BinFolder { get ; set ; } = "..\\..\\Bin" ;
/// <summary>
/// 是否修改输出路径
/// </summary>
2020-12-05 09:07:52 +00:00
public bool ChangedOutputPath { get ; set ; } = true ;
public delegate void StringEventHandler ( object sender , string e ) ;
2020-12-07 09:02:11 +00:00
/// <summary>
/// 状态变化时激发
/// </summary>
[Description("状态变化时激发")]
public event StringEventHandler OnStateChanged ;
public RyProject ( )
{
UpdateSetting ( ) ;
}
/// <summary>
/// 更新设置
/// </summary>
public void UpdateSetting ( )
{
DataProvider mydb = new DataProvider ( ) ;
IDbInterface db = Itrycn_Db . CreateDataProvider ( Itrycn_Db . dataType ) ;
if ( db . ConnDb ( Itrycn_Db . User_SQLConn ) = = 1 )
{
var ds = db . ReadData ( "select * from Settings where name='Setting'" ) ;
if ( mydb . HaveData ( ds ) )
{
var row = mydb . GetData ( ds ) ;
ryCommon . Storage mStor = new ryCommon . Storage ( row [ "value" ] . ToString ( ) ) ;
mStor . SelectNodeBySet ( ) ;
CshapeBasePath = mStor . GetAttrValue ( "CshapeBasePath" ) ;
ReferenceDllPath = mStor . GetAttrValue ( "ReferenceDll" ) ;
}
}
db . Free ( ) ;
}
/// <summary>
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
/// 通过dll路径来寻找dll路径
2020-12-07 09:02:11 +00:00
/// </summary>
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
/// <param name="dll_full_path"></param>
2020-12-07 09:02:11 +00:00
/// <returns></returns>
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
public string GetDllPath ( string dll_full_path )
2021-09-02 09:39:17 +00:00
{
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
return GetDllPath ( "" , dll_full_path ) ;
2021-09-02 09:39:17 +00:00
}
/// <summary>
/// 通过dll名称来寻找dll路径
/// </summary>
/// <param name="dll_foldername">为空则表示根目录下查找,否则查找子目录</param>
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
/// <param name="dll_full_path"></param>
2021-09-02 09:39:17 +00:00
/// <returns></returns>
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
public string GetDllPath ( string dll_foldername , string dll_full_path )
2020-12-07 09:02:11 +00:00
{
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
var dll_name = System . IO . Path . GetFileName ( dll_full_path ) ;
2020-12-07 09:02:11 +00:00
var path_list = ReferenceDllPath . Replace ( "\r" , "" ) . Split ( '\n' ) ;
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
//var find = false;
2020-12-07 09:02:11 +00:00
var result = "" ;
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
var Min_Ver = RySoft . GetVersionStr ( dll_full_path ) ;
var Min_dt = RyFiles . GetFileDate ( dll_full_path ) ;
2020-12-07 09:02:11 +00:00
#region 在 引 用 文 件 夹 查 找 是 否 有 该 dll , 有 则 使 用 引 用 文 件 夹 里 的 dll
for ( int m = 0 ; m < path_list . Length ; m + + )
{
2021-09-02 09:39:17 +00:00
if ( path_list [ m ] . Trim ( ) . Length = = 0 ) { continue ; }
var path = path_list [ m ] . Trim ( '\\' ) ;
if ( dll_foldername . Length > 0 ) { path + = "\\" + dll_foldername ; }
if ( ! System . IO . Directory . Exists ( path ) ) { continue ; }
var files = System . IO . Directory . GetFiles ( path ) ;
2020-12-07 09:02:11 +00:00
for ( int z = 0 ; z < files . Length ; z + + )
{
if ( System . IO . Path . GetFileName ( files [ z ] ) . ToLower ( ) = = dll_name . ToLower ( ) )
{
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
var dll_ver = RySoft . GetVersionStr ( files [ z ] ) ;
var compareVer = RySoft . CompareVer ( Min_Ver , dll_ver ) ;
if ( compareVer < 0 ) //引用位置版本比较老,直接忽略
{
continue ;
}
else if ( compareVer = = 0 ) //引用位置版本一致,则看更新时间
{
var file_dt = RyFiles . GetFileDate ( files [ z ] ) ;
if ( file_dt . LastWriteTime < = Min_dt . LastWriteTime )
{
continue ;
}
else
{
Min_dt = file_dt ;
}
}
else if ( compareVer = = - 1000 )
{
continue ;
}
else
{
Min_dt = RyFiles . GetFileDate ( files [ z ] ) ;
}
2020-12-07 09:02:11 +00:00
result = files [ z ] ;
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
Min_Ver = dll_ver ;
//find = true;
2020-12-07 09:02:11 +00:00
}
}
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
//if (find) { break; }
2020-12-07 09:02:11 +00:00
}
#endregion
return result ;
}
/// <summary>
/// 相对路径转绝对路径,相对项目文件的路径
/// </summary>
/// <returns></returns>
public string RelToAbsPath ( string project_path , string rel_path )
{
string folder = System . IO . Path . GetDirectoryName ( project_path ) ;
var _rel_path = rel_path ;
while ( true )
{
if ( _rel_path . IndexOf ( "..\\" ) = = 0 )
{
folder = System . IO . Path . GetDirectoryName ( folder . TrimEnd ( '\\' ) ) ;
_rel_path = _rel_path . Substring ( 3 ) ;
}
else { break ; }
if ( folder = = "" ) { break ; }
}
return folder + "\\" + _rel_path ;
}
/// <summary>
/// 绝对路径转相对路径,相对项目文件的路径
/// </summary>
/// <returns></returns>
public string AbsToRelPath ( string project_path , string abs_path )
{
string folder = System . IO . Path . GetDirectoryName ( project_path ) ;
var _rel_path = "" ;
var _rel_path2 = "" ;
while ( true )
{
if ( abs_path . IndexOfEx ( folder ) = = 0 )
{
if ( _rel_path2 = = "" )
{ _rel_path = abs_path . Substring ( folder . Length ) ; }
else
{
_rel_path = _rel_path2 . TrimEnd ( '\\' ) + abs_path . Substring ( folder . Length ) ;
}
break ;
}
else
{
folder = System . IO . Path . GetDirectoryName ( folder . TrimEnd ( '\\' ) ) ;
_rel_path2 + = "..\\" ;
}
if ( folder = = "" ) { break ; }
}
return _rel_path ;
}
/// <summary>
/// 更新dll版本,如果全部复制成功, 则返回0,否则返回错误个数
/// </summary>
public int UpdateDlls ( string folder , out string error_str )
{
var _error_str = "" ;
int error = 0 ;
2021-09-02 09:39:17 +00:00
Updates ( "" , folder ) ;
Updates ( "x86" , folder + "\\x86" ) ;
Updates ( "x64" , folder + "\\x64" ) ;
void Updates ( string foldername , string _path )
2020-12-07 09:02:11 +00:00
{
2021-09-02 09:39:17 +00:00
if ( ! System . IO . Directory . Exists ( _path ) ) { return ; }
2020-12-07 09:02:11 +00:00
var files = System . IO . Directory . GetFiles ( _path , "*.dll" ) ;
for ( int i = 0 ; i < files . Length ; i + + )
{
string filename = System . IO . Path . GetFileName ( files [ i ] ) ;
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
var dllpath = GetDllPath ( foldername , files [ i ] ) ;
2021-09-02 09:39:17 +00:00
if ( dllpath . Length > 0 )
2020-12-07 09:02:11 +00:00
{
2021-09-02 09:39:17 +00:00
if ( filename . ToLower ( ) = = "System.Data.SQLite.dll" . ToLower ( ) )
{
RyFiles . CreateDirectory ( _path + "\\x86" ) ;
RyFiles . CreateDirectory ( _path + "\\x64" ) ;
var sourch_folder = System . IO . Path . GetDirectoryName ( dllpath ) ;
2023-02-21 01:46:13 +00:00
if ( RyFiles . CopyFolder ( sourch_folder + "\\x86" , _path + "\\x86\\" ) ! = 0 )
2021-09-02 09:39:17 +00:00
{ _error_str + = sourch_folder + "\\x86\\*\r\n" ; error + + ; }
2023-02-21 01:46:13 +00:00
if ( RyFiles . CopyFolder ( sourch_folder + "\\x64\\" , _path + "\\x64\\" ) ! = 0 )
2021-09-02 09:39:17 +00:00
{ _error_str + = sourch_folder + "\\x64\\*\r\n" ; error + + ; }
}
2023-02-21 01:46:13 +00:00
if ( dllpath ! = files [ i ] & & ! RyFiles . CopyBigFile ( dllpath , files [ i ] ) )
2020-12-07 09:02:11 +00:00
{ _error_str + = files [ i ] + "\r\n" ; error + + ; }
var dll_xml_path = System . IO . Path . GetDirectoryName ( dllpath ) + "\\" + System . IO . Path . GetFileNameWithoutExtension ( dllpath ) + ".xml" ;
if ( System . IO . File . Exists ( dll_xml_path ) )
{
2023-01-21 15:27:44 +00:00
var to_xml_path = System . IO . Path . GetDirectoryName ( files [ i ] ) + "\\" + System . IO . Path . GetFileNameWithoutExtension ( files [ i ] ) + ".xml" ;
2023-02-21 01:46:13 +00:00
if ( dll_xml_path . ToLower ( ) ! = to_xml_path . ToLower ( ) & & ! RyFiles . CopyBigFile ( dll_xml_path , to_xml_path ) )
2020-12-07 09:02:11 +00:00
{ _error_str + = files [ i ] + "\r\n" ; error + + ; }
}
}
}
var dirs = System . IO . Directory . GetDirectories ( _path ) ;
for ( int i = 0 ; i < dirs . Length ; i + + )
{
2021-09-02 09:39:17 +00:00
Updates ( foldername , dirs [ i ] ) ;
2020-12-07 09:02:11 +00:00
}
}
error_str = _error_str ;
return error ;
}
/// <summary>
/// 更新项目引用,定向为本地dll,如果全部复制成功, 则返回0,否则返回错误个数
/// </summary>
public int UpdateCSproj ( string folder )
{
int error = 0 ;
Updates ( folder ) ;
void Updates ( string _path )
{
var files = System . IO . Directory . GetFiles ( _path , "*.csproj" ) ;
for ( int i = 0 ; i < files . Length ; i + + )
{
SetCSproj ( files [ i ] , "" ) ;
}
var dirs = System . IO . Directory . GetDirectories ( _path ) ;
for ( int i = 0 ; i < dirs . Length ; i + + )
{
Updates ( dirs [ i ] ) ;
}
}
return error ;
}
/// <summary>
/// 自动设置csproj文件,将dll引用修改为指定区域的dll、修改命名空间
/// </summary>
/// <param name="path">项目文件(*.csproj)</param>
/// <param name="_project_Eng_name">项目英文名</param>
public void SetCSproj ( string path , string _project_Eng_name )
{
System . Xml . XmlDocument xml = new System . Xml . XmlDocument ( ) ;
xml . Load ( path ) ;
var xmlnsm = new XmlNamespaceManager ( xml . NameTable ) ;
xmlnsm . AddNamespace ( "d" , xml . DocumentElement . NamespaceURI ) ;
//var root = @"d:Project//d:ItemGroup//d:Reference";
if ( _project_Eng_name ! = "" )
{
SetValue ( @"d:Project//d:PropertyGroup//d:RootNamespace" , _project_Eng_name . Replace ( " " , "" ) ) ; //命名空间名
SetValue ( @"d:Project//d:PropertyGroup//d:AssemblyName" , _project_Eng_name . Replace ( " " , "" ) ) ; //程序集名称
}
var OutputPath = GetValue ( @"d:Project//d:PropertyGroup[2]//d:OutputPath" ) . TrimEnd ( '\\' ) + "\\" ;
if ( ChangedOutputPath )
{
SetValue ( @"d:Project//d:PropertyGroup[2]//d:OutputPath" , BinFolder . TrimEnd ( '\\' ) + "\\Debug\\" + ( _project_Eng_name = = "" ? "" : _project_Eng_name + "\\" ) ) ; //Debug输出路径
SetValue ( @"d:Project//d:PropertyGroup[3]//d:OutputPath" , BinFolder . TrimEnd ( '\\' ) + "\\Release\\" + ( _project_Eng_name = = "" ? "" : _project_Eng_name + "\\" ) ) ; //Release输出路径
}
if ( OutputPath = = "" ) { OutputPath = BinFolder . TrimEnd ( '\\' ) + "\\Debug\\" + ( _project_Eng_name = = "" ? "" : _project_Eng_name + "\\" ) ; }
var list = xml . SelectNodes ( @"d:Project//d:ItemGroup//d:Reference//d:HintPath" , xmlnsm ) ;
for ( int i = 0 ; i < list . Count ; i + + )
{
var HintPath = list [ i ] . InnerText ;
var iPos = HintPath . LastIndexOf ( "\\" ) ;
if ( iPos > 0 )
{
var Reference_Name = HintPath . Substring ( iPos + 1 ) ; //引用的dll名称
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
var dll_path = GetDllPath ( OutputPath + Reference_Name ) ;
2021-09-02 09:39:17 +00:00
if ( dll_path . Length > 0 )
2020-12-07 09:02:11 +00:00
{
if ( CopyDllToBin )
{
list [ i ] . InnerText = OutputPath + Reference_Name ;
2023-02-21 01:46:13 +00:00
RyFiles . CopyBigFile ( dll_path , RelToAbsPath ( path , OutputPath + Reference_Name ) ) ;
2020-12-07 09:02:11 +00:00
}
else
{
list [ i ] . InnerText = dll_path ;
}
}
}
}
var ProjectReference_list = xml . SelectNodes ( @"d:Project//d:ItemGroup//d:ProjectReference" , xmlnsm ) ; //项目引用
for ( int i = 0 ; i < ProjectReference_list . Count ; i + + )
{
var element = ( XmlElement ) ProjectReference_list [ i ] ;
var IncludePath = element . GetAttribute ( "Include" ) ;
var iPos = IncludePath . LastIndexOf ( "\\" ) ;
if ( iPos > 0 )
{
var Reference_FileName = IncludePath . Substring ( iPos + 1 ) . ToLower ( ) ; //引用的项目文件名称
string dll_name = "" ;
2024-12-21 06:16:03 +00:00
if ( Reference_FileName = = "RaUIV4.csproj" . ToLower ( ) )
{ dll_name = "RaUI.dll" ; }
else if ( Reference_FileName = = "MyDbV4.csproj" . ToLower ( ) )
2020-12-07 09:02:11 +00:00
{ dll_name = "MyDb.dll" ; }
else if ( Reference_FileName = = "MyDb_SQLiteV4.csproj" . ToLower ( ) )
{ dll_name = "MyDb_SQLite.dll" ; }
else if ( Reference_FileName = = "ryControlsV4.csproj" . ToLower ( ) )
{ dll_name = "ryControls.dll" ; }
else if ( Reference_FileName = = "RyPrint.csproj" . ToLower ( ) )
{ dll_name = "RyPrint.dll" ; }
else if ( Reference_FileName = = "ryUpdateV4.csproj" . ToLower ( ) )
{ dll_name = "ryUpdate.dll" ; }
if ( dll_name ! = "" )
{
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
var dll_path = GetDllPath ( OutputPath + dll_name ) ;
2020-12-07 09:02:11 +00:00
if ( dll_path ! = "" )
{
if ( CopyDllToBin )
{
MoveReference ( System . IO . Path . GetFileNameWithoutExtension ( dll_name ) , OutputPath + dll_name ) ;
2023-02-21 01:46:13 +00:00
RyFiles . CopyBigFile ( dll_path , RelToAbsPath ( path , OutputPath + dll_name ) ) ;
2020-12-07 09:02:11 +00:00
}
else
{
MoveReference ( System . IO . Path . GetFileNameWithoutExtension ( dll_name ) , dll_path ) ;
}
}
}
//将项目引用转换为dll引用
void MoveReference ( string reference_name , string dll_path )
{
ProjectReference_list [ i ] . ParentNode . RemoveChild ( ProjectReference_list [ i ] ) ;
var node = xml . SelectSingleNode ( @"d:Project//d:ItemGroup" , xmlnsm ) ;
XmlNode childXmlNode = xml . CreateElement ( "Reference" ) ;
XmlNode childXmlNode2 = xml . CreateElement ( "HintPath" ) ;
childXmlNode2 . InnerText = dll_path ;
childXmlNode . AppendChild ( childXmlNode2 ) ;
node . AppendChild ( childXmlNode ) ;
XmlElement element2 = ( XmlElement ) childXmlNode ;
element2 . SetAttribute ( "Include" , reference_name ) ;
}
}
}
xml . InnerXml = xml . InnerXml . Replace ( " xmlns=\"\"" , "" ) ;
xml . Save ( path ) ;
string GetValue ( string xpath )
{
var node = xml . SelectSingleNode ( xpath , xmlnsm ) ;
if ( node ! = null )
{
return node . InnerText ;
}
return "" ;
}
bool SetValue ( string xpath , string value )
{
var node = xml . SelectSingleNode ( xpath , xmlnsm ) ;
if ( node ! = null )
{
node . InnerText = value ; return true ;
}
return false ;
}
2020-12-05 09:07:52 +00:00
}
2020-12-07 09:02:11 +00:00
/// <summary>
/// 获取版本号
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public string GetAssemblyVersion ( string path )
{
var AssemblyInfo_Path = System . IO . Path . GetDirectoryName ( path ) + "\\Properties\\AssemblyInfo.cs" ;
if ( System . IO . File . Exists ( AssemblyInfo_Path ) )
{
var AssemblyInfo = ryCommon . RyFiles . ReadAllLines ( AssemblyInfo_Path ) ;
for ( int i = 0 ; i < AssemblyInfo . Length ; i + + )
{
if ( AssemblyInfo [ i ] . StartsWith ( "//" ) ) { continue ; }
if ( AssemblyInfo [ i ] . StartsWith ( "[assembly: AssemblyVersion" ) )
{
return AssemblyInfo [ i ] . GetStr ( "AssemblyVersion(\"" , "\")" ) ;
}
}
return "" ;
}
else
{
return "" ;
}
}
/// <summary>
/// 更新版本号
/// </summary>
/// <param name="AssemblyInfo_Path"></param>
public static void UpdateVer ( string AssemblyInfo_Path )
{
string AssemblyInfo_path = AssemblyInfo_Path ;
if ( System . IO . File . Exists ( AssemblyInfo_path ) )
{
2024-12-20 06:14:48 +00:00
var ext = System . IO . Path . GetExtension ( AssemblyInfo_path ) . ToLower ( ) ;
2020-12-07 09:02:11 +00:00
string Revision_Ver = DateTime . Now . ToString ( "yyMM" ) ;
string Build_Ver = DateTime . Now . ToString ( "dd00" ) ;
2024-12-20 06:14:48 +00:00
if ( ext = = ".cs" )
2020-12-07 09:02:11 +00:00
{
2024-12-20 06:14:48 +00:00
string [ ] AssemblyInfo_list = ryCommon . RyFiles . ReadAllLines ( AssemblyInfo_path ) ;
string text = "" ;
for ( int i = 0 ; i < AssemblyInfo_list . Length ; i + + )
2020-12-07 09:02:11 +00:00
{
2024-12-20 06:14:48 +00:00
string item = AssemblyInfo_list [ i ] ;
if ( item . IndexOf ( "[assembly: AssemblyVersion(\"" ) = = 0 )
{
ChangeVer ( "[assembly: AssemblyVersion(\"" ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyFileVersion(\"" ) = = 0 )
{
ChangeVer ( "[assembly: AssemblyFileVersion(\"" ) ;
}
if ( text ! = "" ) { text + = "\r\n" ; }
text + = item ;
void ChangeVer ( string id )
{
string ver = item . GetStr ( id , "\")]" , 0 , out _ , "" ) ;
if ( ver ! = "" )
{
string [ ] ver_list = ver . Split ( '.' ) ;
if ( ver_list . Length = = 4 )
{
if ( ver_list [ 2 ] ! = Revision_Ver )
{
ver = ver_list [ 0 ] + "." + ver_list [ 1 ] + "." + Revision_Ver + "." + ( Build_Ver . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
}
else
{
if ( ver_list [ 3 ] . IndexOf ( DateTime . Now . ToString ( "dd" ) ) = = 0 )
{
ver = ver_list [ 0 ] + "." + ver_list [ 1 ] + "." + Revision_Ver + "." + ( ver_list [ 3 ] . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
}
else
{
ver = ver_list [ 0 ] + "." + ver_list [ 1 ] + "." + Revision_Ver + "." + ( Build_Ver . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
}
}
item = id + ver + "\")]" ;
}
}
}
}
ryCommon . RyFiles . WriteAllText ( AssemblyInfo_path , text , Encoding . UTF8 ) ;
}
else if ( ext = = ".csproj" )
{
System . Xml . XmlDocument xml = new System . Xml . XmlDocument ( ) ;
xml . Load ( AssemblyInfo_path ) ;
var xmlnsm = new XmlNamespaceManager ( xml . NameTable ) ;
xmlnsm . AddNamespace ( "d" , xml . DocumentElement . NamespaceURI ) ;
var root = @"d:Project//d:PropertyGroup//d:" ;
bool set_result = SetValue ( "Version" ) ;
if ( ! set_result )
{
var ver = "1.0." + Revision_Ver + "." + ( Build_Ver . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
XmlNode node_PropertyGroup = xml . CreateNode ( XmlNodeType . Element , "PropertyGroup" , xml . DocumentElement . NamespaceURI ) ;
xml . ChildNodes [ 0 ] . PrependChild ( node_PropertyGroup ) ;
SetValue2 ( "Version" , ver , "程序集版本号" ) ;
SetValue2 ( "FileVersion" , ver , "文件版本号,通常与程序集版本号相同" ) ;
SetValue2 ( "ProductVersion" , ver , "产品版本号" ) ;
SetValue2 ( "AssemblyName" , System . IO . Path . GetFileNameWithoutExtension ( AssemblyInfo_path ) , "可选:程序集名称" ) ;
SetValue2 ( "AssemblyTitle" , "" , "可选:程序集标题" ) ;
SetValue2 ( "AssemblyDescription" , "" , "可选:程序集描述" ) ;
SetValue2 ( "Company" , "睿元网络" , "可选:程序集公司" ) ;
SetValue2 ( "Product" , "" , "可选:程序集产品" ) ;
SetValue2 ( "Trademark" , "紫林软件2008-" + DateTime . Now . Year , "可选:程序集商标" ) ;
void SetValue2 ( string name2 , string ver2 , string desc )
{
XmlComment tempNode_desc = xml . CreateComment ( desc ) ;
tempNode_desc . InnerText = desc ;
XmlElement tempNode_node = xml . CreateElement ( name2 , xml . DocumentElement . NamespaceURI ) ;
tempNode_node . InnerText = ver2 ;
node_PropertyGroup . AppendChild ( tempNode_desc ) ;
node_PropertyGroup . AppendChild ( tempNode_node ) ;
}
2020-12-07 09:02:11 +00:00
}
2024-12-20 06:14:48 +00:00
else
2020-12-07 09:02:11 +00:00
{
2024-12-20 06:14:48 +00:00
SetValue ( "FileVersion" ) ;
SetValue ( "ProductVersion" ) ;
2020-12-07 09:02:11 +00:00
}
2024-12-20 06:14:48 +00:00
xml . Save ( AssemblyInfo_path ) ;
bool SetValue ( string name )
2020-12-07 09:02:11 +00:00
{
2024-12-20 06:14:48 +00:00
var node = xml . SelectSingleNode ( root + name , xmlnsm ) ;
if ( node ! = null )
2020-12-07 09:02:11 +00:00
{
2024-12-20 06:14:48 +00:00
var ver = node . InnerText ;
2020-12-07 09:02:11 +00:00
string [ ] ver_list = ver . Split ( '.' ) ;
if ( ver_list . Length = = 4 )
{
if ( ver_list [ 2 ] ! = Revision_Ver )
{
ver = ver_list [ 0 ] + "." + ver_list [ 1 ] + "." + Revision_Ver + "." + ( Build_Ver . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
}
else
{
if ( ver_list [ 3 ] . IndexOf ( DateTime . Now . ToString ( "dd" ) ) = = 0 )
{
ver = ver_list [ 0 ] + "." + ver_list [ 1 ] + "." + Revision_Ver + "." + ( ver_list [ 3 ] . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
}
else
{
ver = ver_list [ 0 ] + "." + ver_list [ 1 ] + "." + Revision_Ver + "." + ( Build_Ver . ToInt ( ) + 1 ) . ToString ( "0000" ) ;
}
}
}
2024-12-20 06:14:48 +00:00
node . InnerText = ver ;
return true ;
2020-12-07 09:02:11 +00:00
}
2024-12-20 06:14:48 +00:00
return false ;
2020-12-07 09:02:11 +00:00
}
}
}
}
/// <summary>
2021-02-28 08:51:17 +00:00
/// 获取版本信息
/// </summary>
/// <param name="AssemblyInfo_Path"></param>
public static VerInfo GetVerInfo ( string AssemblyInfo_Path )
{
string AssemblyInfo_path = AssemblyInfo_Path ;
var ver = new VerInfo ( ) ;
if ( System . IO . File . Exists ( AssemblyInfo_path ) )
{
2024-12-20 06:14:48 +00:00
var ext = System . IO . Path . GetExtension ( AssemblyInfo_path ) . ToLower ( ) ;
if ( ext = = ".cs" )
2021-02-28 08:51:17 +00:00
{
2024-12-20 06:14:48 +00:00
string [ ] AssemblyInfo_list = ryCommon . RyFiles . ReadAllLines ( AssemblyInfo_path ) ;
for ( int i = 0 ; i < AssemblyInfo_list . Length ; i + + )
2021-02-28 08:51:17 +00:00
{
2024-12-20 06:14:48 +00:00
string item = AssemblyInfo_list [ i ] ;
if ( item . IndexOf ( "[assembly: AssemblyVersion(\"" ) = = 0 )
{
ver . Version = item . GetStr ( "[assembly: AssemblyVersion(\"" , "\")]" , 0 , out _ , "" ) . Trim ( ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyFileVersion(\"" ) = = 0 )
{
ver . FileVersion = item . GetStr ( "[assembly: AssemblyFileVersion(\"" , "\")]" , 0 , out _ , "" ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyTitle(\"" ) = = 0 )
{
ver . Title = item . GetStr ( "[assembly: AssemblyTitle(\"" , "\")]" , 0 , out _ , "" ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyDescription(\"" ) = = 0 )
{
ver . Description = item . GetStr ( "[assembly: AssemblyDescription(\"" , "\")]" , 0 , out _ , "" ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyCompany(\"" ) = = 0 )
{
ver . Company = item . GetStr ( "[assembly: AssemblyCompany(\"" , "\")]" , 0 , out _ , "" ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyProduct(\"" ) = = 0 )
{
ver . Product = item . GetStr ( "[assembly: AssemblyProduct(\"" , "\")]" , 0 , out _ , "" ) ;
}
else if ( item . IndexOf ( "[assembly: AssemblyCopyright(\"" ) = = 0 )
{
ver . Copyright = item . GetStr ( "[assembly: AssemblyCopyright(\"" , "\")]" , 0 , out _ , "" ) ;
}
2021-02-28 08:51:17 +00:00
}
2024-12-20 06:14:48 +00:00
}
else if ( ext = = ".csproj" )
{
try
2021-02-28 08:51:17 +00:00
{
2024-12-20 06:14:48 +00:00
System . Xml . XmlDocument xml = new System . Xml . XmlDocument ( ) ;
xml . Load ( AssemblyInfo_path ) ;
var xmlnsm = new XmlNamespaceManager ( xml . NameTable ) ;
xmlnsm . AddNamespace ( "d" , xml . DocumentElement . NamespaceURI ) ;
var root = @"d:Project//d:PropertyGroup//d:" ;
ver . Version = GetValue ( "Version" ) ;
ver . FileVersion = GetValue ( "FileVersion" ) ;
ver . Title = GetValue ( "AssemblyTitle" ) ;
ver . Description = GetValue ( "AssemblyDescription" ) ;
ver . Company = GetValue ( "Company" ) ;
ver . Product = GetValue ( "Product" ) ;
ver . Copyright = GetValue ( "Trademark" ) ;
string GetValue ( string name )
{
var node = xml . SelectSingleNode ( root + name , xmlnsm ) ;
if ( node ! = null )
{
return node . InnerText ;
}
return "" ;
}
2021-02-28 08:51:17 +00:00
}
2024-12-20 06:14:48 +00:00
catch { }
2021-02-28 08:51:17 +00:00
}
}
return ver ;
}
/// <summary>
2020-12-07 09:02:11 +00:00
/// 等待进程执行完毕
/// </summary>
/// <param name="cmd_text"></param>
/// <returns></returns>
public string Read_Prog ( string exe , string cmd_text )
{
String cmd = exe ;
Process p = new Process
{
StartInfo = new System . Diagnostics . ProcessStartInfo
{
FileName = cmd , //设定程序名
Arguments = cmd_text ,
UseShellExecute = false , //关闭shell的使用
RedirectStandardInput = true , //重定向标准输入
RedirectStandardOutput = true , //重定向标准输出
RedirectStandardError = false , //重定向错误输出
CreateNoWindow = true //设置不显示窗口
}
} ;
p . Start ( ) ;
string result = p . StandardOutput . ReadToEnd ( ) ;
p . WaitForExit ( 20000 ) ;
p . Close ( ) ;
return result ;
2020-12-05 09:07:52 +00:00
}
/// <summary>
/// 进行打包
/// </summary>
/// <param name="project_folder">项目根目录</param>
2024-12-20 00:14:33 +00:00
/// <param name="PackByLite">最简化打包</param>
public void Pack ( string project_folder , bool PackByLite = false )
2020-12-05 09:07:52 +00:00
{
var com_mode = "Debug" ;
DataProvider mydb = new DataProvider ( ) ;
IDbInterface db = Itrycn_Db . CreateDataProvider ( Itrycn_Db . dataType ) ;
if ( db . ConnDb ( Itrycn_Db . User_SQLConn ) = = 1 )
{
var ds = db . ReadData ( "select * from Settings where name='Setting'" ) ;
if ( mydb . HaveData ( ds ) )
{
var row = mydb . GetData ( ds ) ;
ryCommon . Storage mStor = new ryCommon . Storage ( row [ "value" ] . ToString ( ) ) ;
mStor . SelectNodeBySet ( ) ;
var ReactorPath = mStor . GetAttrValue ( "ReactorPath" ) ;
var WinRARPath = mStor . GetAttrValue ( "WinRARPath" ) ;
if ( WinRARPath = = "" )
{
if ( System . IO . File . Exists ( @"C:\Program Files\WinRAR\WinRAR.exe" ) )
{
WinRARPath = @"C:\Program Files\WinRAR\WinRAR.exe" ;
}
}
2024-12-20 00:14:33 +00:00
var ftpid = mStor . GetAttrValue ( "ftpid" , 0 ) ;
var ftp_remote_dir = mStor . GetAttrValue ( "ftp_remote_dir" ) ;
2020-12-05 09:07:52 +00:00
var bf_folder = project_folder ;
if ( bf_folder ! = "" )
{
ryCommon . Ini ini = new ryCommon . Ini ( bf_folder + "\\查看项目.ryp" ) ;
var eng_name = ini . ReadIni ( "project" , "engname" ) ;
var proglang = ini . ReadIni ( "project" , "proglang" ) ;
2021-02-13 01:17:49 +00:00
var confuse = ini . ReadIni ( "project" , "confuse" , 1 ) ;
2024-12-20 00:14:33 +00:00
var upload_name = ini . ReadIni ( "project" , "UploadName" ) ;
if ( upload_name . Trim ( ) . Length = = 0 ) { upload_name = eng_name ; }
2020-12-05 09:07:52 +00:00
var ouput_folder = bf_folder + "\\Bin\\" + com_mode + "\\" + eng_name ;
2020-12-15 07:18:55 +00:00
if ( ! System . IO . Directory . Exists ( ouput_folder ) )
{
ouput_folder = bf_folder + "\\Bin\\" + com_mode ;
}
- *.[改进]项目支持自动打包功能。
### RySmartEditor V1.0.2501.2701
- *.[改进]FTP上传时限制300毫秒内只能刷新一次UI进度。
### SuperDesign V3.0.2501.2701
- *.[新增]新增支持在线升级功能。
#### 项目功能->项目管理
- *.[新增]FTP上传文件列表和打包文件列表支持在软件里直接编辑。
- *.[改进]更新dll版本将比对版本号,只更新版本号更新或者更新日期更新的dll。
#### 项目功能->更新日志
- *.[新增]新增支持自动记录过的分组信息,然后可以进行选择快速插入。
- *.[新增]记录使用过的项目信息到总数据库,以方便总览。
- *.[改进]右键插入日志时直接对富文本框进行编辑,而不是替换内容,从而具备撤销功能。
- *.[改进]改进MD日志输出的样式设计。
- *.[修复]修复《确认日志覆盖》窗口里的按钮,随着窗口大小变化,按钮会错乱的BUG。
- *.[修复]修复双击日志列表显示日志时,针对本周的时间显示不正确的BUG。
- *.[修复]修复右键新增日志时,如果没有分组,插入的行可能不正确的BUG。
- *.[修复]修复设为开发日志后,鼠标指针变到文本开头的问题。
#### 网页抓取工具
- *.[新增]新增多个常用UA。
- *.[新增]切换Url时如果存在Cookie和Header时,则提示是否清空。
- *.[新增]保存记录时新增支持保存UA。
- *.[新增]Url列表支持图标展示。
2025-01-27 07:41:37 +00:00
if ( ! System . IO . Directory . Exists ( ouput_folder ) )
{
ShowState ( "打包失败,生成目录不存在。" ) ;
return ;
}
2020-12-05 09:07:52 +00:00
var file_ver = "" ;
if ( System . IO . File . Exists ( ouput_folder + "\\" + eng_name + ".exe" ) )
{
FileVersionInfo fileVerInfo = System . Diagnostics . FileVersionInfo . GetVersionInfo ( ouput_folder + "\\" + eng_name + ".exe" ) ;
file_ver = fileVerInfo . ProductVersion ;
}
2021-02-13 01:17:49 +00:00
if ( proglang = = "c#" & & confuse = = 1 )
2020-12-05 09:07:52 +00:00
{
ShowState ( "正在进行混淆..." ) ;
if ( System . IO . File . Exists ( bf_folder + "\\Bin\\混淆_" + com_mode + ".nrproj" ) )
{
var cmd = Read_Prog ( ReactorPath , "-project \"" + bf_folder + "\\Bin\\混淆_" + com_mode + ".nrproj\"" ) ;
MessageBox . Show ( cmd , "提示" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
}
2021-02-13 01:17:49 +00:00
ShowState ( "正在清理不重要的缓存..." ) ;
ryCommon . RyFiles . DeleteFile ( ouput_folder + "\\Secure\\*.pdb" ) ;
ShowState ( "复制混淆文件到底包目录..." ) ;
2024-12-20 00:14:33 +00:00
ryCommon . RyFiles . CopyFileOrFolder ( ouput_folder + "\\Secure\\" , bf_folder + "\\Publish\\OriginalFiles" + ( PackByLite ? "_Lite" : "" ) + "\\" ) ;
2020-12-05 09:07:52 +00:00
}
#region 复 制 自 定 义 规 则 文 件 到 底 包 目 录
ShowState ( "复制自定义规则文件到底包目录..." ) ;
var Publish = ryCommon . RyFiles . ReadAllLines ( bf_folder + "\\Publish\\Publish.set" ) ;
for ( int m = 0 ; m < Publish . Length ; m + + )
{
var line = Publish [ m ] . Trim ( ) ;
if ( line = = "" | | line . IndexOf ( "#" ) = = 0 ) { continue ; }
if ( line . IndexOfEx ( "del:" ) = = 0 )
{
2024-12-20 00:14:33 +00:00
ryCommon . RyFiles . DeleteFile ( bf_folder + "\\Publish\\OriginalFiles" + ( PackByLite ? "_Lite" : "" ) + "\\" + line . Substring ( 4 ) ) ;
2020-12-05 09:07:52 +00:00
}
else if ( line . IndexOfEx ( "copy:" ) = = 0 )
{
2020-12-10 09:15:52 +00:00
var item = line . Substring ( 5 ) ;
2024-12-20 00:14:33 +00:00
if ( item . StartsWith ( "lite=>" ) ) { //精简版才生效
if ( PackByLite )
{
item = item . Substring ( 6 ) ;
}
else
{
continue ;
}
}
if ( item . StartsWith ( "!lite=>" ) ) //非精简版才生效
{
if ( PackByLite )
{
continue ;
}
else
{
item = item . Substring ( 7 ) ;
}
}
if ( item . Contains ( "<" ) & & item . Contains ( ">" ) )
2020-12-10 09:15:52 +00:00
{
DataSet ds_var = db . ReadData ( "select * from VarInfo" ) ;
if ( mydb . HaveData ( ds_var ) )
{
for ( int n = 0 ; n < ds_var . Tables [ 0 ] . Rows . Count ; n + + )
{
DataRow row_var = ds_var . Tables [ 0 ] . Rows [ n ] ;
item = item . Replace ( "<" + row_var [ "VarName" ] . ToString ( ) + ">" , row_var [ "VarValue" ] . ToString ( ) ) ;
if ( ! item . Contains ( "<" ) | | ! item . Contains ( ">" ) )
{
break ;
}
}
}
}
var from_to = item . Replace ( "->" , "|" ) . Split ( '|' ) ;
2020-12-05 09:07:52 +00:00
if ( from_to . Length = = 2 )
{
var from_path = from_to [ 0 ] ;
var to_path = from_to [ 1 ] ;
2024-12-20 00:14:33 +00:00
if ( from_path . IndexOfEx ( ":" ) < 0 & & from_path . IndexOfEx ( "<" ) < 0 )
2021-02-22 06:15:14 +00:00
{
from_path = ouput_folder + "\\" + from_path ;
}
2024-12-20 00:14:33 +00:00
var from_filename = System . IO . Path . GetFileName ( from_path ) ;
if ( from_filename . IndexOfEx ( "*" ) > = 0 )
2023-02-21 01:46:13 +00:00
{
2024-12-20 00:14:33 +00:00
var file_list = System . IO . Directory . GetFiles ( System . IO . Path . GetDirectoryName ( from_path ) , from_filename ) ;
if ( file_list ! = null )
{
for ( int i = 0 ; i < file_list . Length ; i + + )
{
ryCommon . RyFiles . CopyFileOrFolder ( file_list [ i ] , bf_folder + "\\Publish\\OriginalFiles" + ( PackByLite ? "_Lite" : "" ) + "\\" + to_path ) ;
}
}
var dir_list = System . IO . Directory . GetDirectories ( System . IO . Path . GetDirectoryName ( from_path ) , from_filename ) ;
if ( file_list ! = null )
{
for ( int i = 0 ; i < dir_list . Length ; i + + )
{
ryCommon . RyFiles . CopyFileOrFolder ( dir_list [ i ] , bf_folder + "\\Publish\\OriginalFiles" + ( PackByLite ? "_Lite" : "" ) + "\\" + to_path ) ;
}
}
2023-02-21 01:46:13 +00:00
}
2024-12-20 00:14:33 +00:00
else
2023-02-21 01:46:13 +00:00
{
2024-12-20 00:14:33 +00:00
ryCommon . RyFiles . CopyFileOrFolder ( from_path , bf_folder + "\\Publish\\OriginalFiles" + ( PackByLite ? "_Lite" : "" ) + "\\" + to_path ) ;
2023-02-21 01:46:13 +00:00
}
2020-12-05 09:07:52 +00:00
}
}
}
#endregion
ShowState ( "正在打包..." ) ;
2021-02-13 01:17:49 +00:00
if ( System . IO . File . Exists ( bf_folder + "\\Publish\\Green\\" + eng_name + ".zip" ) )
{ RyFiles . DeleteFile ( bf_folder + "\\Publish\\Green\\" + eng_name + ".zip" ) ; }
2024-12-20 00:14:33 +00:00
var cmd2 = Read_Prog ( WinRARPath , "-r -ep1 a \"" + bf_folder + "\\Publish\\Green\\" + eng_name + ".zip\" \"" + bf_folder + "\\Publish\\OriginalFiles" + ( PackByLite ? "_Lite" : "" ) + "\\\"" ) ;
2023-02-21 01:46:13 +00:00
RyFiles . CopyBigFile ( bf_folder + "\\Publish\\Green\\" + eng_name + ".zip" , bf_folder + "\\Publish\\Green\\HistoryVer\\" + eng_name + "_" + file_ver + ".zip" ) ;
2020-12-05 09:07:52 +00:00
ShowState ( "打包完成..." ) ;
2024-12-20 00:14:33 +00:00
if ( ftpid > 0 )
{
Application . OpenForms [ 0 ] . Invoke ( new Action ( ( ) = >
{
SuperDesign . Manager . FTP . FrmUploadUpdateZipToFtp frm = new SuperDesign . Manager . FTP . FrmUploadUpdateZipToFtp ( ) ;
frm . LocalPath = bf_folder + "\\Publish\\Green\\" + eng_name + ".zip" ;
frm . EngName = upload_name ;
frm . FTPId = ftpid ;
frm . RemoteDir = ftp_remote_dir ;
if ( frm . ShowDialog ( ) = = DialogResult . OK )
{
ShowState ( "上传完成..." ) ;
}
frm . Dispose ( ) ;
} ) ) ;
}
2020-12-05 09:07:52 +00:00
}
}
}
db . Free ( ) ;
void ShowState ( string text )
{
OnStateChanged ? . Invoke ( this , text ) ;
}
2020-12-07 09:02:11 +00:00
}
}
2021-02-28 08:51:17 +00:00
public class VerInfo
{
public string Title { get ; set ; } = "" ;
public string Description { get ; set ; } = "" ;
public string Company { get ; set ; } = "" ;
public string Product { get ; set ; } = "" ;
public string Copyright { get ; set ; } = "" ;
public string Version { get ; set ; } = "" ;
public string FileVersion { get ; set ; } = "" ;
}
2020-12-07 09:02:11 +00:00
}