2020-11-28 08:15:13 +00:00
|
|
|
|
using ryCommon;
|
|
|
|
|
using ryCommonDb;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using System.Xml;
|
|
|
|
|
using 开发辅助工具.Manager;
|
|
|
|
|
|
|
|
|
|
namespace 开发辅助工具.Tools
|
|
|
|
|
{
|
|
|
|
|
public partial class FrmCreateProject : Form
|
|
|
|
|
{
|
|
|
|
|
public FrmCreateProject()
|
|
|
|
|
{
|
|
|
|
|
ProcUse = true;
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
CbbLang.SelectedIndex = 0;
|
|
|
|
|
}
|
|
|
|
|
bool ProcUse = false;
|
|
|
|
|
RyProject project = new RyProject();
|
|
|
|
|
private void FrmCreateProject_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
ryCommon.RyFiles.AddDropDrag(TxtFolder.Handle).ElevatedDragDrop += FrmCreateProject_ElevatedDragDrop;
|
|
|
|
|
project.CopyDllToBin = true;
|
|
|
|
|
var lines = RyFiles.ReadAllLines(Application.StartupPath+"\\SysDb\\Folder.txt");
|
|
|
|
|
for (int i = 0; i < lines.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
var item = lines[i].Split('|');
|
|
|
|
|
if(item.Length>=2)
|
|
|
|
|
{
|
|
|
|
|
if (System.IO.Directory.Exists(item[1]))
|
|
|
|
|
{ AddItem(item[0], item[1]); }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void AddItem(string name,string path)
|
|
|
|
|
{
|
|
|
|
|
XPTable.Models.Row itemList = new XPTable.Models.Row()
|
|
|
|
|
{
|
|
|
|
|
Tag = ""
|
|
|
|
|
};
|
|
|
|
|
//需要修改此处
|
|
|
|
|
itemList.Cells.Add(new XPTable.Models.Cell(name));//示例
|
|
|
|
|
var cell = new XPTable.Models.Cell(path);
|
|
|
|
|
cell.ForeColor = Color.Gray;
|
|
|
|
|
itemList.Cells.Add(cell);
|
|
|
|
|
tableModel1.Rows.Add(itemList);
|
|
|
|
|
}
|
|
|
|
|
private void FrmCreateProject_ElevatedDragDrop(object sender, ElevatedDragDropArgs e)
|
|
|
|
|
{
|
|
|
|
|
TxtFolder.Text = e.Files[0];
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BtnBrowser_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if(folderBrowserDialog1.ShowDialog()==DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
TxtFolder.Text = folderBrowserDialog1.SelectedPath;
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void BtnCreate_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
var CshapeBasePath = project.CshapeBasePath;
|
|
|
|
|
var ReferenceDllPath = project.ReferenceDllPath;
|
|
|
|
|
var path = TxtFolder.Text.TrimEnd('\\');
|
|
|
|
|
var project_name = TxtProjectName.Text;
|
|
|
|
|
var project_Eng_name = TxtProjectEngName.Text;
|
|
|
|
|
#region 判断项目是否符合标准
|
|
|
|
|
if (!ryCommon.RyFiles.IsValidFileName(project_name))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("无效的项目名称(中文)", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return;
|
|
|
|
|
}
|
|
|
|
|
if (!ryCommon.RyFiles.IsValidFileName(project_Eng_name) || !project_Eng_name.Replace(" ", "").IsEngOrNum())
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("无效的项目名称(英文)", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return;
|
|
|
|
|
}
|
|
|
|
|
else if (project_Eng_name.Length < 3 || project_Eng_name.Substring(0, 1).IsInt() || project_Eng_name.Substring(0, 1) == " ")
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("无效的项目名称(英文)", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return;
|
|
|
|
|
}
|
|
|
|
|
var full_path = path + "\\" + project_name;
|
|
|
|
|
if(System.IO.Directory.Exists(path + "\\Bin") && System.IO.Directory.Exists(path + "\\Source"))
|
|
|
|
|
{
|
|
|
|
|
full_path = path;
|
|
|
|
|
}
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path);
|
|
|
|
|
if(!System.IO.Directory.Exists(full_path))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("创建路径失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);return;
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
BtnCreate.Enabled = false;
|
|
|
|
|
var prog_lang = "c#";
|
|
|
|
|
if (CbbLang.SelectedIndex == 0) { prog_lang = "c#"; }
|
|
|
|
|
else if (CbbLang.SelectedIndex == 1) { prog_lang = "delphi"; }
|
|
|
|
|
#region 创建项目必备文件夹和文件
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Bin\\Debug\\"+project_Eng_name);
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Source");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Res");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Res\\ThirdParty");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Res\\Images");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Publish\\Green");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Publish\\Green\\HistoryVer");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Publish\\Install");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Publish\\Install\\HistoryVer");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Publish\\OriginalFiles");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Publish\\UpdateFile");
|
|
|
|
|
ryCommon.RyFiles.CreateDirectory(full_path + "\\Help");
|
|
|
|
|
if (!System.IO.File.Exists(full_path + "\\CHANGELOG.md"))
|
|
|
|
|
{ ryCommon.RyFiles.WriteAllText(full_path + "\\CHANGELOG.md", "", Encoding.UTF8); }
|
|
|
|
|
if (!System.IO.File.Exists(full_path + "\\README.md"))
|
2020-12-05 09:07:52 +00:00
|
|
|
|
{ ryCommon.RyFiles.WriteAllText(full_path + "\\README.md", "# "+ project_name+ "\r\n\r\n#### 介绍\r\n", Encoding.UTF8); }
|
2020-11-28 08:15:13 +00:00
|
|
|
|
if (!System.IO.File.Exists(full_path + "\\Publish\\Publish.set"))
|
|
|
|
|
{
|
|
|
|
|
ryCommon.RyFiles.WriteAllText(full_path + "\\Publish\\Publish.set", "#del表示删除文件;copy表示复制文件;" +
|
|
|
|
|
"\r\n#原目录:Bin\\Debug\\或Bin\\Release,目标目录:Publish\\OriginalFiles" +
|
|
|
|
|
"\r\ndel:UserDb\r\ndel:Db\r\ncopy:SysDb\\*->SysDb\\", Encoding.UTF8);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
if (prog_lang == "c#")
|
|
|
|
|
{
|
|
|
|
|
#region 生成混淆信息
|
|
|
|
|
ReactorXML xml = new ReactorXML();
|
|
|
|
|
xml.LoadXML(Application.StartupPath + "\\SysDb\\混淆.nrproj");
|
|
|
|
|
if (!System.IO.File.Exists(full_path + "\\Bin\\混淆_Debug.nrproj"))
|
|
|
|
|
{
|
|
|
|
|
List<string> files_debug = new List<string>
|
2020-12-05 09:07:52 +00:00
|
|
|
|
{
|
|
|
|
|
"Debug\\"+project_Eng_name+"\\" + project_Eng_name + ".exe",
|
|
|
|
|
"Debug\\"+project_Eng_name+"\\" + "MyDb.dll",
|
|
|
|
|
"Debug\\"+project_Eng_name+"\\" + "MyDb_SQLite.dll",
|
|
|
|
|
"Debug\\"+project_Eng_name+"\\" + "ryUpdate.dll",
|
|
|
|
|
"Debug\\"+project_Eng_name+"\\" + "ryControls.dll"
|
|
|
|
|
};
|
2020-11-28 08:15:13 +00:00
|
|
|
|
xml.Save(full_path + "\\Bin\\混淆_Debug.nrproj", files_debug);
|
|
|
|
|
}
|
|
|
|
|
if (!System.IO.File.Exists(full_path + "\\Bin\\混淆_Release.nrproj"))
|
|
|
|
|
{
|
|
|
|
|
List<string> files_Release = new List<string>
|
2020-12-05 09:07:52 +00:00
|
|
|
|
{
|
|
|
|
|
"Release\\"+project_Eng_name+"\\" + project_Eng_name + ".exe",
|
|
|
|
|
"Release\\"+project_Eng_name+"\\" + "MyDb.dll",
|
|
|
|
|
"Release\\"+project_Eng_name+"\\" + "MyDb_SQLite.dll",
|
|
|
|
|
"Release\\"+project_Eng_name+"\\" + "ryUpdate.dll",
|
|
|
|
|
"Release\\"+project_Eng_name+"\\" + "ryControls.dll"
|
|
|
|
|
};
|
2020-11-28 08:15:13 +00:00
|
|
|
|
xml.Save(full_path + "\\Bin\\混淆_Release.nrproj", files_Release);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
#region 设置项目配置文件
|
2020-12-05 09:07:52 +00:00
|
|
|
|
ryCommon.Ini ini = new ryCommon.Ini(full_path + "\\查看项目.ryp");
|
|
|
|
|
ini.WriteIni("project", "name", project_name);//项目名称
|
|
|
|
|
ini.WriteIni("project", "engname", project_Eng_name);//英文项目名称
|
|
|
|
|
ini.WriteIni("project", "usqver", 2.1);//使用的标准版本,新毕方项目标准基于USQ 2.1
|
|
|
|
|
ini.WriteIni("project", "proglang", prog_lang);//项目使用的语言
|
|
|
|
|
var guid = ini.ReadIni("project", "progID", Guid.NewGuid().ToString("D"));
|
|
|
|
|
ini.WriteIni("project", "progID", guid);//项目唯一ID,用于区分不同项目
|
|
|
|
|
|
2020-11-28 08:15:13 +00:00
|
|
|
|
if (!System.IO.File.Exists(full_path + "\\.gitignore")) //复制git忽略规则
|
|
|
|
|
{
|
|
|
|
|
RyFiles.CopyFile(Application.StartupPath+ "\\SysDb\\.gitignore", full_path + "\\.gitignore");
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
if (!ChkUnCreateProject.Checked)
|
|
|
|
|
{
|
|
|
|
|
#region 复制和修改基准项目
|
|
|
|
|
if (System.IO.Directory.Exists(CshapeBasePath) && prog_lang == "c#") //存在基准项目
|
|
|
|
|
{
|
|
|
|
|
var source_folder = full_path + "\\Source\\" + project_Eng_name;
|
|
|
|
|
ryCommon.RyFiles.CopyFile(CshapeBasePath + "\\*", source_folder);
|
|
|
|
|
ryCommon.RyFiles.DeleteFile(source_folder + "\\Bin");
|
|
|
|
|
ryCommon.RyFiles.DeleteFile(source_folder + "\\obj");
|
|
|
|
|
if (System.IO.File.Exists(source_folder + "\\Itrycn_Project.csproj"))
|
|
|
|
|
{
|
|
|
|
|
ryCommon.RyFiles.MoveFile(source_folder + "\\Itrycn_Project.csproj", source_folder + "\\" + project_Eng_name + ".csproj");
|
|
|
|
|
ryCommon.RyFiles.MoveFile(source_folder + "\\Itrycn_Project.csproj.user", source_folder + "\\" + project_Eng_name + ".csproj.user");
|
|
|
|
|
}
|
|
|
|
|
if (System.IO.File.Exists(source_folder + "\\Itrycn_Project2.csproj"))
|
|
|
|
|
{
|
|
|
|
|
ryCommon.RyFiles.MoveFile(source_folder + "\\Itrycn_Project2.csproj", source_folder + "\\" + project_Eng_name + ".csproj");
|
|
|
|
|
ryCommon.RyFiles.MoveFile(source_folder + "\\Itrycn_Project2.csproj.user", source_folder + "\\" + project_Eng_name + ".csproj.user");
|
|
|
|
|
}
|
|
|
|
|
#region 写入新的版本信息
|
|
|
|
|
var AssemblyInfo = ryCommon.RyFiles.ReadAllText(Application.StartupPath + "\\SysDb\\AssemblyInfo.cs");
|
|
|
|
|
AssemblyInfo = AssemblyInfo.Replace("@AssemblyTitle", project_Eng_name);
|
|
|
|
|
AssemblyInfo = AssemblyInfo.Replace("@AssemblyProduct", project_Eng_name);
|
|
|
|
|
AssemblyInfo = AssemblyInfo.Replace("@Copyright", "Copyright 2010-2020");
|
|
|
|
|
ryCommon.RyFiles.WriteAllText(source_folder + "\\Properties\\AssemblyInfo.cs", AssemblyInfo, Encoding.UTF8);
|
|
|
|
|
#endregion
|
|
|
|
|
#region 替换命名空间
|
|
|
|
|
//var Resources = ryCommon.RyFiles.ReadAllText(source_folder + "\\Properties\\Resources.Designer.cs");
|
|
|
|
|
//Resources = Resources.Replace("Itrycn_Project.Properties", project_Eng_name.Replace(" ", "") + ".Properties");
|
|
|
|
|
//Resources = Resources.Replace("Itrycn_Project2.Properties", project_Eng_name.Replace(" ", "") + ".Properties");
|
|
|
|
|
//ryCommon.RyFiles.WriteAllText(source_folder + "\\Properties\\Resources.Designer.cs", Resources, Encoding.UTF8);
|
|
|
|
|
//var frmmain = ryCommon.RyFiles.ReadAllText(source_folder + "\\frmmain.Designer.cs");
|
|
|
|
|
//frmmain = frmmain.Replace("Itrycn_Project.Properties", project_Eng_name.Replace(" ", "") + ".Properties");
|
|
|
|
|
//frmmain = frmmain.Replace("Itrycn_Project2.Properties", project_Eng_name.Replace(" ", "") + ".Properties");
|
|
|
|
|
//ryCommon.RyFiles.WriteAllText(source_folder + "\\frmmain.Designer.cs", frmmain, Encoding.UTF8);
|
|
|
|
|
#endregion
|
|
|
|
|
project.SetCSproj(source_folder + "\\" + project_Eng_name + ".csproj", project_Eng_name);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
BtnCreate.Enabled = true;
|
|
|
|
|
MessageBox.Show("创建成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
|
|
|
RyFiles.OpenFile(full_path);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TxtFolder_Enter(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (ProcUse) { return; }
|
|
|
|
|
table1.Location = new Point(TxtFolder.Left,TxtFolder.Top+TxtFolder.Height);
|
|
|
|
|
table1.Visible = true;
|
|
|
|
|
table1.BringToFront();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TxtFolder_Leave(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!table1.Focused)
|
|
|
|
|
{
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void table1_Leave(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (!TxtFolder.Focused)
|
|
|
|
|
{
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void table1_CellLostFocus(object sender, XPTable.Events.CellFocusEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.Row == -1) { table1.Visible = false; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TxtFolder_KeyDown(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.Down)
|
|
|
|
|
{
|
|
|
|
|
if (table1.Visible)
|
|
|
|
|
{
|
|
|
|
|
table1.TableModel.Selections.Clear();
|
|
|
|
|
table1.TableModel.Selections.AddCells(0, 0, 0, columnModel1.Columns.Count - 1);
|
|
|
|
|
table1.Focus();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void table1_KeyDown(object sender, KeyEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (e.KeyCode == Keys.Up)
|
|
|
|
|
{
|
|
|
|
|
if (table1.SelectedItems.Length > 0 && table1.SelectedItems[0].Index == 0)
|
|
|
|
|
{
|
|
|
|
|
table1.TableModel.Selections.Clear();
|
|
|
|
|
TxtFolder.Select();
|
|
|
|
|
TxtFolder.SelectionLength = 0;
|
|
|
|
|
//rySearch1.Select();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (e.KeyCode == Keys.Enter)
|
|
|
|
|
{
|
|
|
|
|
if (table1.SelectedItems.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
TxtFolder.Text = table1.SelectedItems[0].Cells[ColPath].Text;
|
|
|
|
|
TxtFolder.SelectionLength = 0;
|
|
|
|
|
TxtFolder.SelectionStart = 0;
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void table1_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (table1.SelectedItems.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
TxtFolder.Text = table1.SelectedItems[0].Cells[ColPath].Text;
|
|
|
|
|
TxtFolder.SelectionLength = 0;
|
|
|
|
|
TxtFolder.SelectionStart = 0;
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FrmCreateProject_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
table1.Visible = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FrmCreateProject_Shown(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
ProcUse = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TxtFolder_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
table1.Location = new Point(TxtFolder.Left, TxtFolder.Top + TxtFolder.Height);
|
|
|
|
|
table1.Visible = true;
|
|
|
|
|
table1.BringToFront();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|