更新图数据库相关数据
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -6,10 +6,6 @@
|
||||
"AbsoluteMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|d:\\workspace\\github\\ramitta-lib\\ramitta\\wintreelist.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
|
||||
"RelativeMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|solutionrelative:wintreelist.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|d:\\workspace\\github\\ramitta-lib\\ramitta\\wintreelist.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|solutionrelative:wintreelist.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|d:\\workspace\\github\\ramitta-lib\\ramitta\\wintitlebar.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|solutionrelative:wintitlebar.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
@@ -25,33 +21,32 @@
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 143,
|
||||
"DockedWidth": 157,
|
||||
"SelectedChildIndex": 2,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"DocumentIndex": 1,
|
||||
"Title": "winTitleBar.xaml.cs",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml.cs",
|
||||
"RelativeDocumentMoniker": "winTitleBar.xaml.cs",
|
||||
"ToolTip": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml.cs",
|
||||
"RelativeToolTip": "winTitleBar.xaml.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAuwAgAAAAZAAAAAAAAAA==",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAZAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-08-29T06:48:50.367Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"DocumentIndex": 2,
|
||||
"Title": "winTitleBar.xaml",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml",
|
||||
"RelativeDocumentMoniker": "winTitleBar.xaml",
|
||||
"ToolTip": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml",
|
||||
"RelativeToolTip": "winTitleBar.xaml",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||
"WhenOpened": "2025-08-29T06:48:31.359Z",
|
||||
"EditorCaption": ""
|
||||
"WhenOpened": "2025-08-29T06:48:31.359Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
@@ -64,19 +59,16 @@
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||
"WhenOpened": "2025-08-29T06:48:24.569Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DockedWidth": 248,
|
||||
"SelectedChildIndex": -1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "winTreeList.xaml.cs",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTreeList.xaml.cs",
|
||||
"RelativeDocumentMoniker": "winTreeList.xaml.cs",
|
||||
"ToolTip": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTreeList.xaml.cs",
|
||||
"RelativeToolTip": "winTreeList.xaml.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAC8AAAAUAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-08-29T06:48:09.604Z",
|
||||
"EditorCaption": ""
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
"Version": 1,
|
||||
"WorkspaceRootPath": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|d:\\workspace\\github\\ramitta-lib\\ramitta\\wintreelist.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|solutionrelative:wintreelist.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|d:\\workspace\\github\\ramitta-lib\\ramitta\\wintreelist.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
|
||||
"RelativeMoniker": "D:0:0:{A7A74BAE-D982-4C11-9C1B-1A66DBB482D3}|Ramitta.csproj|solutionrelative:wintreelist.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
|
||||
@@ -25,37 +21,35 @@
|
||||
"VerticalTabListWidth": 256,
|
||||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 143,
|
||||
"SelectedChildIndex": 3,
|
||||
"DockedWidth": 157,
|
||||
"SelectedChildIndex": 2,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"DocumentIndex": 1,
|
||||
"Title": "winTitleBar.xaml.cs",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml.cs",
|
||||
"RelativeDocumentMoniker": "winTitleBar.xaml.cs",
|
||||
"ToolTip": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml.cs",
|
||||
"RelativeToolTip": "winTitleBar.xaml.cs",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAuwAgAAAAZAAAAAAAAAA==",
|
||||
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAgAAAAZAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-08-29T06:48:50.367Z",
|
||||
"EditorCaption": ""
|
||||
"WhenOpened": "2025-08-29T06:48:50.367Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"DocumentIndex": 2,
|
||||
"Title": "winTitleBar.xaml",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml",
|
||||
"RelativeDocumentMoniker": "winTitleBar.xaml",
|
||||
"ToolTip": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTitleBar.xaml",
|
||||
"RelativeToolTip": "winTitleBar.xaml",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||
"WhenOpened": "2025-08-29T06:48:31.359Z",
|
||||
"EditorCaption": ""
|
||||
"WhenOpened": "2025-08-29T06:48:31.359Z"
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"DocumentIndex": 0,
|
||||
"Title": "winTreeList.xaml",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTreeList.xaml",
|
||||
"RelativeDocumentMoniker": "winTreeList.xaml",
|
||||
@@ -64,19 +58,16 @@
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
|
||||
"WhenOpened": "2025-08-29T06:48:24.569Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"DockedWidth": 248,
|
||||
"SelectedChildIndex": -1,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "winTreeList.xaml.cs",
|
||||
"DocumentMoniker": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTreeList.xaml.cs",
|
||||
"RelativeDocumentMoniker": "winTreeList.xaml.cs",
|
||||
"ToolTip": "D:\\Workspace\\GitHub\\Ramitta-lib\\Ramitta\\winTreeList.xaml.cs",
|
||||
"RelativeToolTip": "winTreeList.xaml.cs",
|
||||
"ViewState": "AgIAANEAAAAAAAAAAADwv/QAAABbAAAAAAAAAA==",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2025-08-29T06:48:09.604Z",
|
||||
"EditorCaption": ""
|
||||
"$type": "Bookmark",
|
||||
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
169
Ramitta/Excel.cs
Normal file
169
Ramitta/Excel.cs
Normal file
@@ -0,0 +1,169 @@
|
||||
using NPOI.SS.UserModel;
|
||||
using NPOI.XSSF.UserModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ramitta
|
||||
{
|
||||
public static class Excel
|
||||
{
|
||||
|
||||
public static List<Dictionary<string, string>> ReadExcelAsDictRow(
|
||||
string filePath,
|
||||
object sheetName = null,
|
||||
List<string> headerInit = null)
|
||||
{
|
||||
var result = new List<Dictionary<string, string>>();
|
||||
|
||||
// 打开 Excel 文件
|
||||
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
var workbook = new XSSFWorkbook(fs);
|
||||
ISheet sheet = null;
|
||||
|
||||
// 判断 sheetName 类型
|
||||
if (sheetName is string sheetNameStr)
|
||||
{
|
||||
sheet = workbook.GetSheet(sheetNameStr); // 根据工作表名称获取
|
||||
}
|
||||
else if (sheetName is int sheetNameInt)
|
||||
{
|
||||
sheet = workbook.GetSheetAt(sheetNameInt); // 根据索引获取
|
||||
}
|
||||
else
|
||||
{
|
||||
sheet = workbook.GetSheetAt(0); // 默认获取第一个工作表
|
||||
}
|
||||
|
||||
// 如果没有提供表头,则默认使用第一行作为表头
|
||||
List<string> header = null;
|
||||
|
||||
if (headerInit != null && headerInit.Count > 0)
|
||||
{
|
||||
header = headerInit; // 使用提供的表头
|
||||
}
|
||||
else
|
||||
{
|
||||
var headerRow = sheet.GetRow(0);
|
||||
if (headerRow == null)
|
||||
return result; // 如果第一行为空,直接返回空列表
|
||||
|
||||
header = new List<string>();
|
||||
for (int i = 0; i < headerRow.Cells.Count; i++)
|
||||
{
|
||||
var cell = headerRow.GetCell(i);
|
||||
header.Add(cell?.ToString().Trim() ?? $"Column_{i}"); // 处理空单元格
|
||||
}
|
||||
}
|
||||
|
||||
// 如果提供了表头数据,则从第二行开始读取数据
|
||||
int startRowIndex = headerInit != null && headerInit.Count > 0 ? 0 : 1;
|
||||
|
||||
// 遍历每一行数据
|
||||
for (int rowIndex = startRowIndex; rowIndex <= sheet.LastRowNum; rowIndex++) // 从第二行开始
|
||||
{
|
||||
var row = sheet.GetRow(rowIndex);
|
||||
if (row == null || IsRowEmpty(row)) continue; // 跳过空行
|
||||
|
||||
var rowDict = new Dictionary<string, string>();
|
||||
|
||||
// 遍历每一列
|
||||
for (int colIndex = 0; colIndex < header.Count; colIndex++)
|
||||
{
|
||||
var cell = row.GetCell(colIndex);
|
||||
rowDict[header[colIndex]] = cell?.ToString().Trim() ?? ""; // 直接转换为字符串
|
||||
}
|
||||
|
||||
result.Add(rowDict);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Dictionary<string, List<string>> ReadExcelAsDictCol(
|
||||
string filePath,
|
||||
object sheetName = null,
|
||||
List<string> headerInit = null)
|
||||
{
|
||||
var result = new Dictionary<string, List<string>>();
|
||||
|
||||
// 打开 Excel 文件
|
||||
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
|
||||
{
|
||||
var workbook = new XSSFWorkbook(fs);
|
||||
ISheet sheet = null;
|
||||
|
||||
// 如果 sheetName 不为 null,按名字找到对应的工作表
|
||||
if (sheetName != null && sheetName is string sheetNameStr)
|
||||
{
|
||||
sheet = workbook.GetSheet(sheetNameStr); // 根据工作表名称获取
|
||||
}
|
||||
else
|
||||
{
|
||||
sheet = workbook.GetSheetAt(0); // 默认第一个工作表
|
||||
}
|
||||
|
||||
if (sheet == null)
|
||||
return result; // 如果没有找到工作表,直接返回空字典
|
||||
|
||||
// 如果 headerInit 不为 null,使用它来初始化表头,否则从 Excel 中的第一行获取
|
||||
var header = headerInit ?? new List<string>();
|
||||
|
||||
if (header.Count == 0)
|
||||
{
|
||||
// 获取第一行作为键(headers)
|
||||
var headerRow = sheet.GetRow(0);
|
||||
if (headerRow == null)
|
||||
return result; // 如果第一行为空,直接返回空字典
|
||||
|
||||
for (int i = 0; i < headerRow.Cells.Count; i++)
|
||||
{
|
||||
var cell = headerRow.GetCell(i);
|
||||
string headerText = cell?.ToString().Trim() ?? $"Column_{i}"; // 处理空单元格
|
||||
header.Add(headerText);
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化每一列对应的 List<string>
|
||||
foreach (var headerText in header)
|
||||
{
|
||||
result[headerText] = new List<string>();
|
||||
}
|
||||
|
||||
// 从第一行开始遍历数据,而不是从第二行开始
|
||||
for (int rowIndex = headerInit == null ? 1 : 0; rowIndex <= sheet.LastRowNum; rowIndex++) // 修改这里,开始从第0行
|
||||
{
|
||||
var row = sheet.GetRow(rowIndex);
|
||||
if (row == null || IsRowEmpty(row)) continue; // 跳过空行
|
||||
|
||||
// 遍历每一列数据并添加到对应的 List<string> 中
|
||||
for (int colIndex = 0; colIndex < header.Count; colIndex++)
|
||||
{
|
||||
var cell = row.GetCell(colIndex);
|
||||
string cellValue = cell?.ToString().Trim() ?? ""; // 直接转换为字符串
|
||||
|
||||
if (!string.IsNullOrEmpty(cellValue))
|
||||
{
|
||||
result[header[colIndex]].Add(cellValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool IsRowEmpty(IRow row)
|
||||
{
|
||||
foreach (var cell in row.Cells)
|
||||
{
|
||||
if (cell != null && !string.IsNullOrEmpty(cell.ToString().Trim()))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
339
Ramitta/Neo4jService.cs
Normal file
339
Ramitta/Neo4jService.cs
Normal file
@@ -0,0 +1,339 @@
|
||||
using Neo4j.Driver;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ramitta
|
||||
{
|
||||
public class Neo4jService
|
||||
{
|
||||
private IDriver _driver;
|
||||
|
||||
public Neo4jService(string uri, string user, string password)
|
||||
{
|
||||
_driver = GraphDatabase.Driver(uri, AuthTokens.Basic(user, password));
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
_driver?.Dispose();
|
||||
}
|
||||
|
||||
// 创建任意节点,支持更多属性
|
||||
public async Task CreateNodeAsync(string nodeType, Dictionary<string, object> properties)
|
||||
{
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
// 动态生成属性字符串
|
||||
var propertyString = string.Join(", ", properties.Keys);
|
||||
var values = new Dictionary<string, object>();
|
||||
foreach (var prop in properties)
|
||||
{
|
||||
values.Add(prop.Key, prop.Value);
|
||||
}
|
||||
|
||||
var query = $"CREATE (n:{nodeType} {{{string.Join(", ", properties.Keys.Select(k => $"{k}: ${k}"))}}})";
|
||||
await session.RunAsync(query, values);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<Dictionary<string, string>>> GetRelatedNodesAsync(
|
||||
string nodeLabel,
|
||||
Dictionary<string, string> nodeProperties)
|
||||
{
|
||||
// 构建属性条件字符串
|
||||
var propertyConditions = new List<string>();
|
||||
foreach (var prop in nodeProperties)
|
||||
{
|
||||
propertyConditions.Add($"{prop.Key}: '{prop.Value.Replace("'", "\\'")}'");
|
||||
}
|
||||
|
||||
var propertiesString = string.Join(", ", propertyConditions);
|
||||
|
||||
var query = $@"
|
||||
MATCH (h:{nodeLabel} {{{propertiesString}}})-[r]-(related)
|
||||
RETURN DISTINCT h";
|
||||
|
||||
var resultList = new List<Dictionary<string, string>>();
|
||||
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
var result = await session.RunAsync(query);
|
||||
|
||||
await result.ForEachAsync(record =>
|
||||
{
|
||||
var hNode = record["h"].As<INode>();
|
||||
resultList.Add(ConvertNodeToDictionary(hNode));
|
||||
});
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
private Dictionary<string, string> ConvertNodeToDictionary(INode node)
|
||||
{
|
||||
var dict = new Dictionary<string, string>();
|
||||
|
||||
|
||||
// 添加所有属性
|
||||
foreach (var property in node.Properties)
|
||||
{
|
||||
dict[property.Key] = property.Value?.ToString() ?? string.Empty;
|
||||
}
|
||||
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 创建或合并节点
|
||||
public async Task MergeNodeAsync(string nodeType, Dictionary<string, object> properties)
|
||||
{
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
// 动态生成属性字符串
|
||||
var propertyString = string.Join(", ", properties.Keys);
|
||||
var values = new Dictionary<string, object>();
|
||||
foreach (var prop in properties)
|
||||
{
|
||||
values.Add(prop.Key, prop.Value);
|
||||
}
|
||||
|
||||
var query = $"MERGE (n:{nodeType} {{{string.Join(", ", properties.Keys.Select(k => $"{k}: ${k}"))}}})";
|
||||
await session.RunAsync(query, values);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<List<Dictionary<string, object>>> GetNodesAsync(string nodeType = null)
|
||||
{
|
||||
var result = new List<Dictionary<string, object>>();
|
||||
|
||||
var query = nodeType == null
|
||||
? "MATCH (n) RETURN n"
|
||||
: $"MATCH (n:{nodeType}) RETURN n";
|
||||
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
var cursor = await session.RunAsync(query);
|
||||
|
||||
while (await cursor.FetchAsync())
|
||||
{
|
||||
var node = cursor.Current["n"].As<INode>();
|
||||
var nodeProperties = new Dictionary<string, object>(node.Properties);
|
||||
|
||||
// 添加节点ID和标签信息
|
||||
nodeProperties["_id"] = node.Id;
|
||||
nodeProperties["_labels"] = node.Labels.ToArray();
|
||||
|
||||
result.Add(nodeProperties);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// 创建任意关系,支持动态定义关系类型
|
||||
public enum ArrowDirection
|
||||
{
|
||||
Left, // 反向关系
|
||||
Right, // 正向关系(默认)
|
||||
Both // 双向关系
|
||||
}
|
||||
public async Task CreateRelationshipAsync(
|
||||
string relationshipType,
|
||||
string nodeType1, string nodeTap1, string nodeName1,
|
||||
string nodeType2, string nodeTap2, string nodeName2,
|
||||
ArrowDirection arrow = ArrowDirection.Right
|
||||
)
|
||||
{
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
var query = $"MATCH (a:{nodeType1} {{{nodeTap1}: $name1}}), (b:{nodeType2} {{{nodeTap2}: $name2}}) ";
|
||||
|
||||
if (arrow == ArrowDirection.Right)
|
||||
query+=$"MERGE (a)-[:{relationshipType}]->(b)";
|
||||
else if (arrow == ArrowDirection.Left)
|
||||
query += $"MERGE (b)-[:{relationshipType}]->(a)";
|
||||
else if (arrow == ArrowDirection.Both) {
|
||||
query += $"MERGE (a)-[:{relationshipType}]->(b)";
|
||||
query += $"MERGE (b)-[:{relationshipType}]->(a)";
|
||||
}
|
||||
await session.RunAsync(query, new { name1 = nodeName1, name2 = nodeName2 });
|
||||
}
|
||||
}
|
||||
public async Task<List<Dictionary<string, object>>> GetRelatedNodesAsync(
|
||||
string nodeName,
|
||||
string nodeType, // 默认值为 "Person"
|
||||
string relationshipType = null,
|
||||
Dictionary<string, object> additionalNodeFilters = null, // 可选的节点属性过滤
|
||||
Dictionary<string, object> additionalRelationshipFilters = null // 可选的关系属性过滤
|
||||
)
|
||||
{
|
||||
var result = new List<Dictionary<string, object>>();
|
||||
|
||||
// 构建基本的查询部分
|
||||
var query = new StringBuilder($"MATCH (a:{nodeType} {{name: $name}})");
|
||||
|
||||
// 如果有额外的节点过滤条件,加入到查询中
|
||||
if (additionalNodeFilters != null && additionalNodeFilters.Count > 0)
|
||||
{
|
||||
foreach (var filter in additionalNodeFilters)
|
||||
{
|
||||
query.Append($" AND a.{filter.Key} = ${filter.Key}");
|
||||
}
|
||||
}
|
||||
|
||||
// 根据关系类型添加关系部分
|
||||
var relationshipFilter = relationshipType != null ? $":{relationshipType}" : "";
|
||||
query.Append($"-[r{relationshipFilter}]->(b)");
|
||||
|
||||
// 如果有关系的额外过滤条件,加入到查询中
|
||||
if (additionalRelationshipFilters != null && additionalRelationshipFilters.Count > 0)
|
||||
{
|
||||
foreach (var filter in additionalRelationshipFilters)
|
||||
{
|
||||
query.Append($" AND r.{filter.Key} = ${filter.Key}");
|
||||
}
|
||||
}
|
||||
|
||||
// 添加返回部分
|
||||
query.Append(" RETURN b");
|
||||
|
||||
// 合并所有的参数
|
||||
var parameters = new Dictionary<string, object> { { "name", nodeName } };
|
||||
|
||||
// 如果有节点过滤条件,合并到参数中
|
||||
if (additionalNodeFilters != null)
|
||||
{
|
||||
foreach (var filter in additionalNodeFilters)
|
||||
{
|
||||
parameters[filter.Key] = filter.Value;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果有关系过滤条件,合并到参数中
|
||||
if (additionalRelationshipFilters != null)
|
||||
{
|
||||
foreach (var filter in additionalRelationshipFilters)
|
||||
{
|
||||
parameters[filter.Key] = filter.Value;
|
||||
}
|
||||
}
|
||||
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
var cursor = await session.RunAsync(query.ToString(), parameters);
|
||||
|
||||
// 遍历查询结果
|
||||
while (await cursor.FetchAsync())
|
||||
{
|
||||
var relatedNode = cursor.Current["b"].As<INode>(); // 获取目标节点对象
|
||||
|
||||
// 将节点的所有属性加入结果
|
||||
var nodeProperties = new Dictionary<string, object>();
|
||||
foreach (var property in relatedNode.Properties)
|
||||
{
|
||||
nodeProperties[property.Key] = property.Value;
|
||||
}
|
||||
result.Add(nodeProperties);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<Dictionary<string, object>>> GetRelationshipsAsync(
|
||||
string nodeName,
|
||||
string nodeType = null,
|
||||
string relationshipType = null,
|
||||
bool includeIncoming = false,
|
||||
bool includeOutgoing = true)
|
||||
{
|
||||
var result = new List<Dictionary<string, object>>();
|
||||
var relationshipQuery = "";
|
||||
|
||||
// 根据关系方向构建查询
|
||||
if (relationshipType != null)
|
||||
{
|
||||
if (includeOutgoing && includeIncoming)
|
||||
{
|
||||
relationshipQuery = $"-[:{relationshipType}]-";
|
||||
}
|
||||
else if (includeOutgoing)
|
||||
{
|
||||
relationshipQuery = $"-[:{relationshipType}]->";
|
||||
}
|
||||
else if (includeIncoming)
|
||||
{
|
||||
relationshipQuery = $"<-[:{relationshipType}]-";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (includeOutgoing && includeIncoming)
|
||||
{
|
||||
relationshipQuery = "-[]-";
|
||||
}
|
||||
else if (includeOutgoing)
|
||||
{
|
||||
relationshipQuery = "-[]->";
|
||||
}
|
||||
else if (includeIncoming)
|
||||
{
|
||||
relationshipQuery = "<-[]-";
|
||||
}
|
||||
}
|
||||
|
||||
// 构造MATCH查询
|
||||
var query = $"MATCH (a:{nodeType ?? "Person"} {{name: $name}}){relationshipQuery}(b) RETURN b";
|
||||
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
var cursor = await session.RunAsync(query, new { name = nodeName });
|
||||
|
||||
// 遍历查询结果
|
||||
while (await cursor.FetchAsync())
|
||||
{
|
||||
var relatedNode = cursor.Current["b"].As<INode>(); // 获取目标节点对象
|
||||
|
||||
// 将节点的所有属性加入结果
|
||||
var nodeProperties = new Dictionary<string, object>();
|
||||
foreach (var property in relatedNode.Properties)
|
||||
{
|
||||
nodeProperties[property.Key] = property.Value;
|
||||
}
|
||||
result.Add(nodeProperties);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// 删除特定节点和它的关系
|
||||
public async Task DeleteNodeAsync(string nodeType, string nodeName)
|
||||
{
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
await session.RunAsync($"MATCH (n:{nodeType} {{name: $name}}) DETACH DELETE n", new { name = nodeName });
|
||||
}
|
||||
}
|
||||
|
||||
// 删除所有节点和关系
|
||||
public async Task DeleteAllNodesAndRelationshipsAsync()
|
||||
{
|
||||
using (var session = _driver.AsyncSession())
|
||||
{
|
||||
await session.RunAsync("MATCH (n) DETACH DELETE n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
176
Ramitta/PostgreSqlDriver.cs
Normal file
176
Ramitta/PostgreSqlDriver.cs
Normal file
@@ -0,0 +1,176 @@
|
||||
using Npgsql;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ramitta
|
||||
{
|
||||
public partial class PostgreSqlDriver
|
||||
{
|
||||
private readonly string _connectionString;
|
||||
|
||||
public PostgreSqlDriver(string connectionString)
|
||||
{
|
||||
_connectionString = connectionString;
|
||||
}
|
||||
|
||||
// 执行查询操作,返回查询结果
|
||||
public async Task<List<Dictionary<string, object>>> ExecuteQueryAsync(string query, Dictionary<string, object> parameters = null)
|
||||
{
|
||||
var result = new List<Dictionary<string, object>>();
|
||||
|
||||
using (var conn = new NpgsqlConnection(_connectionString))
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
Debug.WriteLine("Database connection established.");
|
||||
|
||||
using (var cmd = new NpgsqlCommand(query, conn))
|
||||
{
|
||||
if (parameters != null)
|
||||
{
|
||||
foreach (var param in parameters)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value);
|
||||
}
|
||||
}
|
||||
|
||||
using (var reader = await cmd.ExecuteReaderAsync())
|
||||
{
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
var row = new Dictionary<string, object>();
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
row[reader.GetName(i)] = await reader.IsDBNullAsync(i) ? null : reader.GetValue(i);
|
||||
}
|
||||
result.Add(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Debug.WriteLine($"Query executed: {query}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"Error executing query: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 执行插入、更新、删除操作
|
||||
public async Task<int> ExecuteNonQueryAsync(string query, Dictionary<string, object> parameters = null)
|
||||
{
|
||||
using (var conn = new NpgsqlConnection(_connectionString))
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
Debug.WriteLine("Database connection established.");
|
||||
|
||||
using (var cmd = new NpgsqlCommand(query, conn))
|
||||
{
|
||||
if (parameters != null)
|
||||
{
|
||||
foreach (var param in parameters)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value);
|
||||
}
|
||||
}
|
||||
|
||||
var rowsAffected = await cmd.ExecuteNonQueryAsync();
|
||||
Debug.WriteLine($"Executed query: {query}, Rows affected: {rowsAffected}");
|
||||
return rowsAffected;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"Error executing non-query: {ex.Message}");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 执行插入操作,返回生成的主键
|
||||
public async Task<int> ExecuteInsertAsync(string query, Dictionary<string, object> parameters = null, string returnColumn = "id")
|
||||
{
|
||||
using (var conn = new NpgsqlConnection(_connectionString))
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
Debug.WriteLine("Database connection established.");
|
||||
|
||||
using (var cmd = new NpgsqlCommand(query, conn))
|
||||
{
|
||||
if (parameters != null)
|
||||
{
|
||||
foreach (var param in parameters)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value);
|
||||
}
|
||||
}
|
||||
|
||||
cmd.CommandText += $" RETURNING {returnColumn};";
|
||||
|
||||
var result = await cmd.ExecuteScalarAsync();
|
||||
Debug.WriteLine($"Executed insert, inserted ID: {result}");
|
||||
return result != null ? Convert.ToInt32(result) : -1;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"Error executing insert: {ex.Message}");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 执行事务操作
|
||||
public async Task<bool> ExecuteTransactionAsync(List<string> queries, List<Dictionary<string, object>> parametersList)
|
||||
{
|
||||
using (var conn = new NpgsqlConnection(_connectionString))
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
Debug.WriteLine("Database connection established.");
|
||||
using (var transaction = await conn.BeginTransactionAsync())
|
||||
{
|
||||
for (int i = 0; i < queries.Count; i++)
|
||||
{
|
||||
using (var cmd = new NpgsqlCommand(queries[i], conn, (NpgsqlTransaction)transaction))
|
||||
{
|
||||
var parameters = parametersList[i];
|
||||
if (parameters != null)
|
||||
{
|
||||
foreach (var param in parameters)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(param.Key, param.Value ?? DBNull.Value);
|
||||
}
|
||||
}
|
||||
|
||||
await cmd.ExecuteNonQueryAsync();
|
||||
}
|
||||
}
|
||||
|
||||
await transaction.CommitAsync();
|
||||
Debug.WriteLine("Transaction committed.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"Error executing transaction: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,18 @@
|
||||
using Microsoft.VisualBasic;
|
||||
using NPOI.SS.UserModel;
|
||||
using NPOI.XSSF.UserModel;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Threading;
|
||||
|
||||
namespace Ramitta.lib
|
||||
@@ -25,14 +30,14 @@ namespace Ramitta.lib
|
||||
#endregion
|
||||
|
||||
#region 调试函数
|
||||
public static void DebugBar(Label obj, String text, SolidColorBrush? color=null)
|
||||
public static void DebugBar(Label obj, String? text, SolidColorBrush? color=null)
|
||||
{
|
||||
if (obj == null) return;
|
||||
// 通过Dispatcher确保在UI线程执行
|
||||
obj.Dispatcher.Invoke(() =>
|
||||
{
|
||||
obj.Content = text;
|
||||
if(color!=null)obj.Background = color;
|
||||
if (text!=null)obj.Content = text;
|
||||
if (color != null) obj.Background = color;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -82,21 +87,108 @@ namespace Ramitta.lib
|
||||
}
|
||||
#endregion
|
||||
|
||||
public static void FileWrite(string outputPath, string outputText)
|
||||
#region 文件解析
|
||||
public static bool IsPathExist(string databasePath)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(databasePath))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return Directory.Exists(databasePath);
|
||||
}
|
||||
public static void FileWrite(string outputPath, string outputText, bool createDirectories = true,bool fileAdd = false)
|
||||
{
|
||||
string directory = Path.GetDirectoryName(outputPath);
|
||||
if (createDirectories && !Directory.Exists(directory))
|
||||
{
|
||||
Directory.CreateDirectory(directory);
|
||||
}
|
||||
|
||||
// 使用 StreamWriter 写入文件
|
||||
using (StreamWriter writer = new StreamWriter(outputPath, false))
|
||||
{
|
||||
Debug.WriteLine(outputText);
|
||||
|
||||
writer.WriteLine(outputText);
|
||||
}
|
||||
}
|
||||
|
||||
public static string FileRead(string outputPath)
|
||||
{
|
||||
return File.ReadAllText(outputPath);
|
||||
}
|
||||
|
||||
// 获取路径下所有文件和文件夹,支持传入判断文件的函数
|
||||
public static List<string> GetFilesAndDirectories(string path, bool? isDirectory = null, Func<string, bool> fileFilter = null, Func<string, string> outputFormat = null)
|
||||
{
|
||||
List<string> result = new List<string>();
|
||||
|
||||
// 获取文件夹
|
||||
var directories = Directory.GetDirectories(path);
|
||||
foreach (var dir in directories)
|
||||
{
|
||||
if (isDirectory == null || isDirectory == true)
|
||||
{
|
||||
// 如果指定了输出格式函数,则使用格式化函数;否则使用原始路径
|
||||
result.Add(outputFormat == null ? dir : outputFormat(dir));
|
||||
}
|
||||
}
|
||||
|
||||
// 获取文件
|
||||
var files = Directory.GetFiles(path);
|
||||
foreach (var file in files)
|
||||
{
|
||||
// 如果传入了 fileFilter 函数,调用该函数进行筛选
|
||||
if (fileFilter == null || fileFilter(file))
|
||||
{
|
||||
if (isDirectory == null || isDirectory == false)
|
||||
{
|
||||
// 如果指定了输出格式函数,则使用格式化函数;否则使用原始路径
|
||||
result.Add(outputFormat == null ? file : outputFormat(file));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// 生成截图
|
||||
public static PngBitmapEncoder CaptureWindowScreenshot(Window window, string? filePath = null)
|
||||
{
|
||||
// 获取当前窗口的 DPI 缩放因子
|
||||
var dpiScale = VisualTreeHelper.GetDpi(window);
|
||||
|
||||
// 获取 DPI 缩放因子的 X 和 Y 值,通常 X 和 Y 应该是相等的
|
||||
double dpiX = dpiScale.DpiScaleX;
|
||||
double dpiY = dpiScale.DpiScaleY;
|
||||
|
||||
// 根据 DPI 缩放因子调整截图的尺寸
|
||||
int width = (int)(window.ActualWidth * dpiX); // 使用 dpiX
|
||||
int height = (int)(window.ActualHeight * dpiY); // 使用 dpiY
|
||||
|
||||
// 创建一个 RenderTargetBitmap 对象,并且考虑 DPI 缩放
|
||||
RenderTargetBitmap rtb = new RenderTargetBitmap(width, height, 96 * dpiX, 96 * dpiY, System.Windows.Media.PixelFormats.Pbgra32);
|
||||
|
||||
// 使用 VisualTreeHelper 进行渲染
|
||||
rtb.Render(window);
|
||||
|
||||
// 创建一个 PngBitmapEncoder 来保存为 PNG 格式
|
||||
PngBitmapEncoder pngEncoder = new PngBitmapEncoder();
|
||||
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));
|
||||
|
||||
if (!string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
// 保存图像到文件
|
||||
using (FileStream fs = new FileStream(filePath, FileMode.Create))
|
||||
{
|
||||
pngEncoder.Save(fs);
|
||||
}
|
||||
}
|
||||
return pngEncoder;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region 任务操作
|
||||
public static async Task<int> RunExternalCommand(string? applicationPath = "explorer.exe", string arguments="", bool UseShellExecute = false, bool CreateNoWindow = false)
|
||||
{
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||
@@ -176,7 +268,146 @@ namespace Ramitta.lib
|
||||
throw; // 重新抛出异常以便调用者捕获
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
// 生成哈希
|
||||
public static string GenerateHash(string input)
|
||||
{
|
||||
// 创建SHA256对象
|
||||
using (SHA256 sha256 = SHA256.Create())
|
||||
{
|
||||
// 将输入字符串转换为字节数组并计算哈希值
|
||||
byte[] bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(input));
|
||||
|
||||
// 将哈希值转换为十六进制字符串
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
foreach (byte b in bytes)
|
||||
{
|
||||
stringBuilder.Append(b.ToString("x2"));
|
||||
}
|
||||
|
||||
// 返回最终的哈希字符串
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
public class CryptoHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 生成RSA密钥对
|
||||
/// </summary>
|
||||
/// <param name="keySize">密钥长度(通常为2048、4096)</param>
|
||||
/// <returns>包含公钥和私钥的元组</returns>
|
||||
public static (string publicKey, string privateKey) GenerateKeyPair(int keySize = 2048)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var rsa = RSA.Create(keySize))
|
||||
{
|
||||
string publicKey = rsa.ToXmlString(false);
|
||||
string privateKey = rsa.ToXmlString(true);
|
||||
|
||||
return (publicKey, privateKey);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"密钥生成失败: {ex.Message}");
|
||||
return (null, null);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用私钥对数据进行签名
|
||||
/// </summary>
|
||||
public static string? SignData(string data, string privateKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var rsa = RSA.Create())
|
||||
{
|
||||
rsa.FromXmlString(privateKey);
|
||||
|
||||
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
|
||||
byte[] signature = rsa.SignData(dataBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
|
||||
|
||||
return Convert.ToBase64String(signature);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用公钥验证签名
|
||||
/// </summary>
|
||||
public static bool? VerifySignature(string data, string signature, string publicKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var rsa = RSA.Create())
|
||||
{
|
||||
rsa.FromXmlString(publicKey);
|
||||
|
||||
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
|
||||
byte[] signatureBytes = Convert.FromBase64String(signature);
|
||||
|
||||
return rsa.VerifyData(dataBytes, signatureBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用公钥加密数据
|
||||
/// </summary>
|
||||
public static string? Encrypt(string data, string publicKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var rsa = RSA.Create())
|
||||
{
|
||||
rsa.FromXmlString(publicKey);
|
||||
|
||||
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
|
||||
byte[] encryptedBytes = rsa.Encrypt(dataBytes, RSAEncryptionPadding.OaepSHA256);
|
||||
|
||||
return Convert.ToBase64String(encryptedBytes);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用私钥解密数据
|
||||
/// </summary>
|
||||
public static string? Decrypt(string encryptedData, string privateKey)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var rsa = RSA.Create())
|
||||
{
|
||||
rsa.FromXmlString(privateKey);
|
||||
|
||||
byte[] encryptedBytes = Convert.FromBase64String(encryptedData);
|
||||
byte[] decryptedBytes = rsa.Decrypt(encryptedBytes, RSAEncryptionPadding.OaepSHA256);
|
||||
|
||||
return Encoding.UTF8.GetString(decryptedBytes);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,14 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||
<PackageReference Include="Neo4j.Driver" Version="5.28.3" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Npgsql" Version="9.0.3" />
|
||||
<PackageReference Include="NPOI" Version="2.7.4" />
|
||||
<PackageReference Include="System.Data.SQLite" Version="2.0.1" />
|
||||
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" />
|
||||
<PackageReference Include="System.Data.SQLite.EF6" Version="2.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
270
Ramitta/SQLite.cs
Normal file
270
Ramitta/SQLite.cs
Normal file
@@ -0,0 +1,270 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SQLite;
|
||||
|
||||
namespace Ramitta
|
||||
{
|
||||
public class SQLite : IDisposable
|
||||
{
|
||||
private SQLiteConnection db;
|
||||
private bool disposed = false;
|
||||
|
||||
// 构造函数,初始化数据库连接
|
||||
// 参数: connectionString - 数据库连接字符串
|
||||
// 例如: "Data Source=mydatabase.db;Version=3;"
|
||||
public SQLite(string connectionString)
|
||||
{
|
||||
db = new SQLiteConnection(connectionString);
|
||||
db.Open();
|
||||
}
|
||||
|
||||
// 创建表:根据表名和字段定义创建表
|
||||
// 参数: tableName - 表名
|
||||
// 参数: columns - 字段定义字典,键为字段名,值为字段类型
|
||||
// 例如: CreateTable("Users", new Dictionary<string, string> { {"Id", "INTEGER"}, {"Name", "TEXT"} });
|
||||
public void CreateTable(string tableName, Dictionary<string, string> columns)
|
||||
{
|
||||
// 构建列定义的字符串
|
||||
var columnsDefinition = string.Join(", ", columns.Select(c => $"{c.Key} {c.Value}"));
|
||||
string createTableQuery = $"CREATE TABLE IF NOT EXISTS {tableName} ({columnsDefinition});";
|
||||
|
||||
using (var cmd = new SQLiteCommand(createTableQuery, db))
|
||||
{
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
// 向已存在的表中添加新列
|
||||
// 参数: tableName - 表名
|
||||
// 参数: columnName - 要添加的列名
|
||||
// 参数: columnType - 列的数据类型
|
||||
// 例如: AddColumn("Users", "Email", "TEXT");
|
||||
public void AddColumn(string tableName, string columnName, string columnType)
|
||||
{
|
||||
// 检查表是否存在
|
||||
if (!TableExists(tableName))
|
||||
{
|
||||
throw new ArgumentException($"表 '{tableName}' 不存在");
|
||||
}
|
||||
|
||||
// 检查列是否已存在
|
||||
if (ColumnExists(tableName, columnName))
|
||||
{
|
||||
Console.WriteLine($"列 '{columnName}' 在表 '{tableName}' 中已存在");
|
||||
return;
|
||||
}
|
||||
|
||||
// 构建添加列的SQL语句
|
||||
string addColumnQuery = $"ALTER TABLE {tableName} ADD COLUMN {columnName} {columnType};";
|
||||
|
||||
using (var cmd = new SQLiteCommand(addColumnQuery, db))
|
||||
{
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
Console.WriteLine($"已向表 '{tableName}' 添加列 '{columnName}'");
|
||||
}
|
||||
|
||||
// 检查表是否存在
|
||||
private bool TableExists(string tableName)
|
||||
{
|
||||
string query = "SELECT count(*) FROM sqlite_master WHERE type='table' AND name=@tableName;";
|
||||
|
||||
using (var cmd = new SQLiteCommand(query, db))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@tableName", tableName);
|
||||
var result = cmd.ExecuteScalar();
|
||||
return Convert.ToInt32(result) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查列是否已存在
|
||||
private bool ColumnExists(string tableName, string columnName)
|
||||
{
|
||||
string query = $"PRAGMA table_info({tableName});";
|
||||
|
||||
using (var cmd = new SQLiteCommand(query, db))
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader["name"].ToString().Equals(columnName, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// 批量添加多个列
|
||||
// 参数: tableName - 表名
|
||||
// 参数: columns - 字段定义字典,键为字段名,值为字段类型
|
||||
// 例如: AddColumns("Users", new Dictionary<string, string> { {"Email", "TEXT"}, {"Age", "INTEGER"} });
|
||||
public void AddColumns(string tableName, Dictionary<string, string> columns)
|
||||
{
|
||||
foreach (var column in columns)
|
||||
{
|
||||
AddColumn(tableName, column.Key, column.Value);
|
||||
}
|
||||
}
|
||||
|
||||
// 插入数据:向指定表插入一条记录
|
||||
// 参数: tableName - 表名
|
||||
// 参数: columnValues - 字段和对应值的字典
|
||||
// 例如: InsertData("Users", new Dictionary<string, object> { {"Name", "John"}, {"Age", 30} });
|
||||
public void InsertData(string tableName, Dictionary<string, object> columnValues)
|
||||
{
|
||||
// 构建列和参数的字符串
|
||||
var columns = string.Join(", ", columnValues.Keys);
|
||||
var parameters = string.Join(", ", columnValues.Keys.Select(k => "@" + k));
|
||||
|
||||
string insertQuery = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";
|
||||
|
||||
using (var cmd = new SQLiteCommand(insertQuery, db))
|
||||
{
|
||||
foreach (var kvp in columnValues)
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@" + kvp.Key, kvp.Value);
|
||||
}
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
// 查询数据:执行任意查询语句并返回结果
|
||||
// 参数: query - SQL查询语句
|
||||
// 参数: parameters - 可选的查询参数字典
|
||||
// 例如: SelectData("SELECT * FROM Users WHERE Age > @age", new Dictionary<string, object> { {"age", 25} });
|
||||
public List<Dictionary<string, object>> SelectData(string query, Dictionary<string, object> parameters = null)
|
||||
{
|
||||
var result = new List<Dictionary<string, object>>();
|
||||
|
||||
using (var cmd = new SQLiteCommand(query, db))
|
||||
{
|
||||
// 添加查询参数(如果有的话)
|
||||
if (parameters != null)
|
||||
{
|
||||
foreach (var kvp in parameters)
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@" + kvp.Key, kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
using (SQLiteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
var row = new Dictionary<string, object>();
|
||||
for (int i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
row[reader.GetName(i)] = reader.GetValue(i);
|
||||
}
|
||||
result.Add(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 更新数据:根据条件更新指定表中的记录
|
||||
// 参数: tableName - 表名
|
||||
// 参数: columnValues - 需要更新的字段和对应值的字典
|
||||
// 参数: condition - 更新条件
|
||||
// 例如: UpdateData("Users", new Dictionary<string, object> { {"Age", 31} }, "Name = 'John'");
|
||||
public void UpdateData(string tableName, Dictionary<string, object> columnValues, string condition)
|
||||
{
|
||||
// 构建SET子句
|
||||
var setClause = string.Join(", ", columnValues.Keys.Select(k => $"{k} = @{k}"));
|
||||
string updateQuery = $"UPDATE {tableName} SET {setClause} WHERE {condition}";
|
||||
|
||||
using (var cmd = new SQLiteCommand(updateQuery, db))
|
||||
{
|
||||
foreach (var kvp in columnValues)
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@" + kvp.Key, kvp.Value);
|
||||
}
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
// 删除数据:根据条件删除指定表中的记录
|
||||
// 参数: tableName - 表名
|
||||
// 参数: condition - 删除条件
|
||||
// 例如: DeleteData("Users", "Age < 18");
|
||||
public void DeleteData(string tableName, string condition)
|
||||
{
|
||||
string deleteQuery = $"DELETE FROM {tableName} WHERE {condition}";
|
||||
|
||||
using (var cmd = new SQLiteCommand(deleteQuery, db))
|
||||
{
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
// 支持事务操作:允许在同一个事务中执行多个操作
|
||||
// 参数: transactionActions - 一个包含多个数据库操作的委托
|
||||
// 例如: ExecuteTransaction(() =>
|
||||
// {
|
||||
// InsertData("Users", new Dictionary<string, object> { {"Name", "Alice"}, {"Age", 28} });
|
||||
// UpdateData("Users", new Dictionary<string, object> { {"Age", 29} }, "Name = 'Bob'");
|
||||
// });
|
||||
public void ExecuteTransaction(Action transactionActions)
|
||||
{
|
||||
using (var transaction = db.BeginTransaction())
|
||||
{
|
||||
try
|
||||
{
|
||||
transactionActions.Invoke(); // 执行多个操作
|
||||
transaction.Commit(); // 提交事务
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
transaction.Rollback(); // 回滚事务
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 删除所有表
|
||||
public void DropAllTables()
|
||||
{
|
||||
// 获取所有表名
|
||||
string getTablesQuery = "SELECT name FROM sqlite_master WHERE type='table';";
|
||||
var tables = SelectData(getTablesQuery);
|
||||
|
||||
foreach (var table in tables)
|
||||
{
|
||||
string tableName = table["name"].ToString();
|
||||
string dropTableQuery = $"DROP TABLE IF EXISTS {tableName};";
|
||||
|
||||
using (var cmd = new SQLiteCommand(dropTableQuery, db))
|
||||
{
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 释放资源,关闭数据库连接
|
||||
// 确保数据库连接在对象销毁时被正确关闭
|
||||
public void Dispose()
|
||||
{
|
||||
if (!disposed)
|
||||
{
|
||||
if (db != null && db.State == ConnectionState.Open)
|
||||
{
|
||||
db.Close();
|
||||
db.Dispose();
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// 析构函数,调用Dispose释放资源
|
||||
~SQLite()
|
||||
{
|
||||
Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,20 +170,30 @@
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<Style.Triggers>
|
||||
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
|
||||
<Setter Property="Background" Value="#757575"/>
|
||||
<Setter Property="Background" Value="#5c2893"/>
|
||||
</DataTrigger>
|
||||
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="True">
|
||||
<Setter Property="Background" Value="#9E9E9E"/>
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<!--TreeView-->
|
||||
<Style TargetType="TreeView">
|
||||
<Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource AncestorType=Window}}"/>
|
||||
<Setter Property="Background" Value="#424242"/>
|
||||
</Style>
|
||||
|
||||
|
||||
<Style TargetType="TreeViewItem">
|
||||
<Style.Triggers>
|
||||
<!-- 鼠标悬停时更改背景色 -->
|
||||
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
<!-- 修改为你希望的背景色 -->
|
||||
</DataTrigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
|
||||
<Style TargetType="Label">
|
||||
<Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource AncestorType=Window}}"/>
|
||||
</Style>
|
||||
|
||||
@@ -8,12 +8,125 @@
|
||||
".NETCoreApp,Version=v8.0": {
|
||||
"Ramitta/1.0.0": {
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "13.0.3"
|
||||
"CommunityToolkit.Mvvm": "8.4.0",
|
||||
"NPOI": "2.7.4",
|
||||
"Neo4j.Driver": "5.28.3",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"Npgsql": "9.0.3",
|
||||
"System.Data.SQLite": "2.0.1",
|
||||
"System.Data.SQLite.Core": "1.0.119",
|
||||
"System.Data.SQLite.EF6": "2.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"Ramitta.dll": {}
|
||||
}
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.4.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/BouncyCastle.Cryptography.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.4.0.33771"
|
||||
}
|
||||
}
|
||||
},
|
||||
"CommunityToolkit.Mvvm/8.4.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/CommunityToolkit.Mvvm.dll": {
|
||||
"assemblyVersion": "8.4.0.0",
|
||||
"fileVersion": "8.4.0.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"EntityFramework/6.5.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.CSharp": "4.7.0",
|
||||
"System.CodeDom": "6.0.0",
|
||||
"System.ComponentModel.Annotations": "5.0.0",
|
||||
"System.Configuration.ConfigurationManager": "6.0.1",
|
||||
"System.Data.SqlClient": "4.8.6"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/EntityFramework.SqlServer.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.500.124.31603"
|
||||
},
|
||||
"lib/netstandard2.1/EntityFramework.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.500.124.31603"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Enums.NET/5.0.0": {
|
||||
"runtime": {
|
||||
"lib/net7.0/Enums.NET.dll": {
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"ExtendedNumerics.BigDecimal/2025.1001.2.129": {
|
||||
"runtime": {
|
||||
"lib/net8.0/ExtendedNumerics.BigDecimal.dll": {
|
||||
"assemblyVersion": "2025.1001.2.129",
|
||||
"fileVersion": "2025.1001.2.129"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MathNet.Numerics.Signed/5.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/MathNet.Numerics.dll": {
|
||||
"assemblyVersion": "5.0.0.0",
|
||||
"fileVersion": "5.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.CSharp/4.7.0": {},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IO.RecyclableMemoryStream/3.0.1": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
|
||||
"assemblyVersion": "3.0.1.0",
|
||||
"fileVersion": "3.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/5.0.0": {},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "6.0.0",
|
||||
"System.Security.Principal.Windows": "4.7.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents/6.0.0": {},
|
||||
"Neo4j.Driver/5.28.3": {
|
||||
"dependencies": {
|
||||
"System.IO.Pipelines": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Neo4j.Driver.dll": {
|
||||
"assemblyVersion": "5.28.42.3",
|
||||
"fileVersion": "5.28.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Newtonsoft.Json/13.0.3": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Newtonsoft.Json.dll": {
|
||||
@@ -21,6 +134,269 @@
|
||||
"fileVersion": "13.0.3.27908"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql/9.0.3": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Npgsql.dll": {
|
||||
"assemblyVersion": "9.0.3.0",
|
||||
"fileVersion": "9.0.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"NPOI/2.7.4": {
|
||||
"dependencies": {
|
||||
"BouncyCastle.Cryptography": "2.4.0",
|
||||
"Enums.NET": "5.0.0",
|
||||
"ExtendedNumerics.BigDecimal": "2025.1001.2.129",
|
||||
"MathNet.Numerics.Signed": "5.0.0",
|
||||
"Microsoft.IO.RecyclableMemoryStream": "3.0.1",
|
||||
"SharpZipLib": "1.4.2",
|
||||
"SixLabors.Fonts": "1.0.1",
|
||||
"SixLabors.ImageSharp": "2.1.10",
|
||||
"System.Security.Cryptography.Xml": "8.0.2",
|
||||
"ZString": "2.6.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/NPOI.Core.dll": {
|
||||
"assemblyVersion": "2.7.4.0",
|
||||
"fileVersion": "2.7.4.0"
|
||||
},
|
||||
"lib/net8.0/NPOI.OOXML.dll": {
|
||||
"assemblyVersion": "2.7.4.0",
|
||||
"fileVersion": "2.7.4.0"
|
||||
},
|
||||
"lib/net8.0/NPOI.OpenXml4Net.dll": {
|
||||
"assemblyVersion": "2.7.4.0",
|
||||
"fileVersion": "2.7.4.0"
|
||||
},
|
||||
"lib/net8.0/NPOI.OpenXmlFormats.dll": {
|
||||
"assemblyVersion": "2.7.4.0",
|
||||
"fileVersion": "2.7.4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||
"dependencies": {
|
||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
|
||||
}
|
||||
},
|
||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-arm64/native/sni.dll": {
|
||||
"rid": "win-arm64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "4.6.25512.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-x64/native/sni.dll": {
|
||||
"rid": "win-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "4.6.25512.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-x86/native/sni.dll": {
|
||||
"rid": "win-x86",
|
||||
"assetType": "native",
|
||||
"fileVersion": "4.6.25512.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SharpZipLib/1.4.2": {
|
||||
"runtime": {
|
||||
"lib/net6.0/ICSharpCode.SharpZipLib.dll": {
|
||||
"assemblyVersion": "1.4.2.13",
|
||||
"fileVersion": "1.4.2.13"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SixLabors.Fonts/1.0.1": {
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/SixLabors.Fonts.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SixLabors.ImageSharp/2.1.10": {
|
||||
"dependencies": {
|
||||
"System.Runtime.CompilerServices.Unsafe": "5.0.0",
|
||||
"System.Text.Encoding.CodePages": "5.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp3.1/SixLabors.ImageSharp.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.1.10.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Stub.System.Data.SQLite.Core.NetStandard/1.0.119": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/System.Data.SQLite.dll": {
|
||||
"assemblyVersion": "1.0.119.0",
|
||||
"fileVersion": "1.0.119.0"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/linux-x64/native/SQLite.Interop.dll": {
|
||||
"rid": "linux-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "0.0.0.0"
|
||||
},
|
||||
"runtimes/osx-x64/native/SQLite.Interop.dll": {
|
||||
"rid": "osx-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "0.0.0.0"
|
||||
},
|
||||
"runtimes/win-x64/native/SQLite.Interop.dll": {
|
||||
"rid": "win-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "1.0.119.0"
|
||||
},
|
||||
"runtimes/win-x86/native/SQLite.Interop.dll": {
|
||||
"rid": "win-x86",
|
||||
"assetType": "native",
|
||||
"fileVersion": "1.0.119.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.CodeDom/6.0.0": {},
|
||||
"System.ComponentModel.Annotations/5.0.0": {},
|
||||
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.ProtectedData": "6.0.0",
|
||||
"System.Security.Permissions": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Data.SqlClient/4.8.6": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "4.7.0",
|
||||
"System.Security.Principal.Windows": "4.7.0",
|
||||
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||
"assemblyVersion": "4.6.1.6",
|
||||
"fileVersion": "4.700.23.52603"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||
"rid": "unix",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "4.6.1.6",
|
||||
"fileVersion": "4.700.23.52603"
|
||||
},
|
||||
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "4.6.1.6",
|
||||
"fileVersion": "4.700.23.52603"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Data.SQLite/2.0.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/System.Data.SQLite.dll": {
|
||||
"assemblyVersion": "1.0.119.0",
|
||||
"fileVersion": "1.0.119.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Data.SQLite.Core/1.0.119": {
|
||||
"dependencies": {
|
||||
"Stub.System.Data.SQLite.Core.NetStandard": "1.0.119"
|
||||
}
|
||||
},
|
||||
"System.Data.SQLite.EF6/2.0.1": {
|
||||
"dependencies": {
|
||||
"System.Data.SQLite": "2.0.1",
|
||||
"EntityFramework": "6.5.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/System.Data.SQLite.EF6.dll": {
|
||||
"assemblyVersion": "1.0.119.0",
|
||||
"fileVersion": "1.0.119.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Drawing.Common/6.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.SystemEvents": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.IO.Pipelines/8.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.IO.Pipelines.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/5.0.0": {},
|
||||
"System.Security.AccessControl/6.0.0": {},
|
||||
"System.Security.Cryptography.Pkcs/8.0.1": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/win/lib/net8.0/System.Security.Cryptography.Pkcs.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/6.0.0": {},
|
||||
"System.Security.Cryptography.Xml/8.0.2": {
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.Pkcs": "8.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Security.Cryptography.Xml.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Permissions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Security.AccessControl": "6.0.0",
|
||||
"System.Windows.Extensions": "6.0.0"
|
||||
}
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {},
|
||||
"System.Text.Encoding.CodePages/5.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.Platforms": "5.0.0"
|
||||
}
|
||||
},
|
||||
"System.Windows.Extensions/6.0.0": {
|
||||
"dependencies": {
|
||||
"System.Drawing.Common": "6.0.0"
|
||||
}
|
||||
},
|
||||
"ZString/2.6.0": {
|
||||
"runtime": {
|
||||
"lib/net7.0/ZString.dll": {
|
||||
"assemblyVersion": "2.6.0.0",
|
||||
"fileVersion": "2.6.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -30,12 +406,313 @@
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"BouncyCastle.Cryptography/2.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-SwXsAV3sMvAU/Nn31pbjhWurYSjJ+/giI/0n6tCrYoupEK34iIHCuk3STAd9fx8yudM85KkLSVdn951vTng/vQ==",
|
||||
"path": "bouncycastle.cryptography/2.4.0",
|
||||
"hashPath": "bouncycastle.cryptography.2.4.0.nupkg.sha512"
|
||||
},
|
||||
"CommunityToolkit.Mvvm/8.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tqVU8yc/ADO9oiTRyTnwhFN68hCwvkliMierptWOudIAvWY1mWCh5VFh+guwHJmpMwfg0J0rY+yyd5Oy7ty9Uw==",
|
||||
"path": "communitytoolkit.mvvm/8.4.0",
|
||||
"hashPath": "communitytoolkit.mvvm.8.4.0.nupkg.sha512"
|
||||
},
|
||||
"EntityFramework/6.5.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-sQRP2lWg1i3aAGWqdliAM8zrGx7LHMUk+9/MoxUjwfTZYGMXvZ2JYZTlyTm1PqDxvn3c9E3U76TWDON7Y5+CVA==",
|
||||
"path": "entityframework/6.5.1",
|
||||
"hashPath": "entityframework.6.5.1.nupkg.sha512"
|
||||
},
|
||||
"Enums.NET/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NfGq1iLJZ15XZPgBhjk4Ns1XZ+beaGk6cog6B4LxcROdGoSMdgCJqYXF70P6VTd3dz/vFRY4h1u1lAMqW/DC2w==",
|
||||
"path": "enums.net/5.0.0",
|
||||
"hashPath": "enums.net.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"ExtendedNumerics.BigDecimal/2025.1001.2.129": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-+woGT1lsBtwkntOpx2EZbdbySv0aWPefE0vrfvclxVdbi4oa2bbtphFPWgMiQe+kRCPICbfFJwp6w1DuR7Ge2Q==",
|
||||
"path": "extendednumerics.bigdecimal/2025.1001.2.129",
|
||||
"hashPath": "extendednumerics.bigdecimal.2025.1001.2.129.nupkg.sha512"
|
||||
},
|
||||
"MathNet.Numerics.Signed/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-PSrHBVMf41SjbhlnpOMnoir8YgkyEJ6/nwxvjYpH+vJCexNcx2ms6zRww5yLVqLet1xLJgZ39swtKRTLhWdnAw==",
|
||||
"path": "mathnet.numerics.signed/5.0.0",
|
||||
"hashPath": "mathnet.numerics.signed.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.CSharp/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==",
|
||||
"path": "microsoft.csharp/4.7.0",
|
||||
"hashPath": "microsoft.csharp.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
|
||||
"path": "microsoft.extensions.logging.abstractions/8.0.2",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IO.RecyclableMemoryStream/3.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-s/s20YTVY9r9TPfTrN5g8zPF1YhwxyqO6PxUkrYTGI2B+OGPe9AdajWZrLhFqXIvqIW23fnUE4+ztrUWNU1+9g==",
|
||||
"path": "microsoft.io.recyclablememorystream/3.0.1",
|
||||
"hashPath": "microsoft.io.recyclablememorystream.3.0.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.NETCore.Platforms/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
|
||||
"path": "microsoft.netcore.platforms/5.0.0",
|
||||
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.Registry/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
|
||||
"path": "microsoft.win32.registry/4.7.0",
|
||||
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Win32.SystemEvents/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==",
|
||||
"path": "microsoft.win32.systemevents/6.0.0",
|
||||
"hashPath": "microsoft.win32.systemevents.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"Neo4j.Driver/5.28.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-nGfPRmx11Ma/dWcy54swbP+5tu++KrvR5DZgSWi/zAgFEPoObubGaO540i0flTleH0sZQkO8X9lAg4H2Y05ffg==",
|
||||
"path": "neo4j.driver/5.28.3",
|
||||
"hashPath": "neo4j.driver.5.28.3.nupkg.sha512"
|
||||
},
|
||||
"Newtonsoft.Json/13.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
|
||||
"path": "newtonsoft.json/13.0.3",
|
||||
"hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
|
||||
},
|
||||
"Npgsql/9.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==",
|
||||
"path": "npgsql/9.0.3",
|
||||
"hashPath": "npgsql.9.0.3.nupkg.sha512"
|
||||
},
|
||||
"NPOI/2.7.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-1tCebTkr9qAfwiEa2ErXco2IT+D8MNmT9d4KFz9nWn3owkc5fAOsvxV8kq6y4531B4Z3gnInrvEdonwFyoRqPQ==",
|
||||
"path": "npoi/2.7.4",
|
||||
"hashPath": "npoi.2.7.4.nupkg.sha512"
|
||||
},
|
||||
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==",
|
||||
"path": "runtime.native.system.data.sqlclient.sni/4.7.0",
|
||||
"hashPath": "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==",
|
||||
"path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||
"hashPath": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==",
|
||||
"path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||
"hashPath": "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==",
|
||||
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"SharpZipLib/1.4.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A==",
|
||||
"path": "sharpziplib/1.4.2",
|
||||
"hashPath": "sharpziplib.1.4.2.nupkg.sha512"
|
||||
},
|
||||
"SixLabors.Fonts/1.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ljezRHWc7N0azdQViib7Aa5v+DagRVkKI2/93kEbtjVczLs+yTkSq6gtGmvOcx4IqyNbO3GjLt7SAQTpLkySNw==",
|
||||
"path": "sixlabors.fonts/1.0.1",
|
||||
"hashPath": "sixlabors.fonts.1.0.1.nupkg.sha512"
|
||||
},
|
||||
"SixLabors.ImageSharp/2.1.10": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-hk1E7U3RSlxrBVo6Gb6OjeM52fChpFYH+SZvyT/M2vzSGlzAaKE33hc3V/Pvnjcnn1opT8/Z+0QfqdM5HsIaeA==",
|
||||
"path": "sixlabors.imagesharp/2.1.10",
|
||||
"hashPath": "sixlabors.imagesharp.2.1.10.nupkg.sha512"
|
||||
},
|
||||
"Stub.System.Data.SQLite.Core.NetStandard/1.0.119": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dI7ngiCNgdm+n00nQvFTa+LbHvE9MIQXwMSLRzJI/KAJ7G1WmCachsvfE1CD6xvb3OXJvYYEfv3+S/LHyhN0Rg==",
|
||||
"path": "stub.system.data.sqlite.core.netstandard/1.0.119",
|
||||
"hashPath": "stub.system.data.sqlite.core.netstandard.1.0.119.nupkg.sha512"
|
||||
},
|
||||
"System.CodeDom/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==",
|
||||
"path": "system.codedom/6.0.0",
|
||||
"hashPath": "system.codedom.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.ComponentModel.Annotations/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==",
|
||||
"path": "system.componentmodel.annotations/5.0.0",
|
||||
"hashPath": "system.componentmodel.annotations.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Configuration.ConfigurationManager/6.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-jXw9MlUu/kRfEU0WyTptAVueupqIeE3/rl0EZDMlf8pcvJnitQ8HeVEp69rZdaStXwTV72boi/Bhw8lOeO+U2w==",
|
||||
"path": "system.configuration.configurationmanager/6.0.1",
|
||||
"hashPath": "system.configuration.configurationmanager.6.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Data.SqlClient/4.8.6": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==",
|
||||
"path": "system.data.sqlclient/4.8.6",
|
||||
"hashPath": "system.data.sqlclient.4.8.6.nupkg.sha512"
|
||||
},
|
||||
"System.Data.SQLite/2.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-x1WBY7ADvWQD7vvupe+S4b7MTj3YyMRl4iysDvgclt+i1AZDdplox0sWslplvzK+eapmegQYuKV8lQhf4o8b5Q==",
|
||||
"path": "system.data.sqlite/2.0.1",
|
||||
"hashPath": "system.data.sqlite.2.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Data.SQLite.Core/1.0.119": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-bhQB8HVtRA+OOYw8UTD1F1kU+nGJ0/OZvH1JmlVUI4bGvgVEWeX1NcHjA765NvUoRVuCPlt8PrEpZ1thSsk1jg==",
|
||||
"path": "system.data.sqlite.core/1.0.119",
|
||||
"hashPath": "system.data.sqlite.core.1.0.119.nupkg.sha512"
|
||||
},
|
||||
"System.Data.SQLite.EF6/2.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-z+zNooMGDUMqO0oXXV00EtyTtgv6gBfQDO8U2H15HhBvCWInaxebqg8wQRzuqIb++dFp6p8mPqm7IFSDSP2+wg==",
|
||||
"path": "system.data.sqlite.ef6/2.0.1",
|
||||
"hashPath": "system.data.sqlite.ef6.2.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Drawing.Common/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==",
|
||||
"path": "system.drawing.common/6.0.0",
|
||||
"hashPath": "system.drawing.common.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.IO.Pipelines/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
|
||||
"path": "system.io.pipelines/8.0.0",
|
||||
"hashPath": "system.io.pipelines.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
|
||||
"path": "system.runtime.compilerservices.unsafe/5.0.0",
|
||||
"hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.AccessControl/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==",
|
||||
"path": "system.security.accesscontrol/6.0.0",
|
||||
"hashPath": "system.security.accesscontrol.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Cryptography.Pkcs/8.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-CoCRHFym33aUSf/NtWSVSZa99dkd0Hm7OCZUxORBjRB16LNhIEOf8THPqzIYlvKM0nNDAPTRBa1FxEECrgaxxA==",
|
||||
"path": "system.security.cryptography.pkcs/8.0.1",
|
||||
"hashPath": "system.security.cryptography.pkcs.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==",
|
||||
"path": "system.security.cryptography.protecteddata/6.0.0",
|
||||
"hashPath": "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Cryptography.Xml/8.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-aDM/wm0ZGEZ6ZYJLzgqjp2FZdHbDHh6/OmpGfb7AdZ105zYmPn/83JRU2xLIbwgoNz9U1SLUTJN0v5th3qmvjA==",
|
||||
"path": "system.security.cryptography.xml/8.0.2",
|
||||
"hashPath": "system.security.cryptography.xml.8.0.2.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Permissions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==",
|
||||
"path": "system.security.permissions/6.0.0",
|
||||
"hashPath": "system.security.permissions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Principal.Windows/4.7.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||
"path": "system.security.principal.windows/4.7.0",
|
||||
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Encoding.CodePages/5.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NyscU59xX6Uo91qvhOs2Ccho3AR2TnZPomo1Z0K6YpyztBPM/A5VbkzOO19sy3A3i1TtEnTxA7bCe3Us+r5MWg==",
|
||||
"path": "system.text.encoding.codepages/5.0.0",
|
||||
"hashPath": "system.text.encoding.codepages.5.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Windows.Extensions/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==",
|
||||
"path": "system.windows.extensions/6.0.0",
|
||||
"hashPath": "system.windows.extensions.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"ZString/2.6.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XE8a+11nZg0LRaf+RGABEWaHIf8yGd5w8v/Ra1iWxMBmAVzwuKbW7G21mS0U7w7sh1lYcgckInWGgnz4qyET8A==",
|
||||
"path": "zstring/2.6.0",
|
||||
"hashPath": "zstring.2.6.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
20
Ramitta/bin/Debug/net8.0-windows/Ramitta.runtimeconfig.json
Normal file
20
Ramitta/bin/Debug/net8.0-windows/Ramitta.runtimeconfig.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net8.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "8.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.WindowsDesktop.App",
|
||||
"version": "8.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"MVVMTOOLKIT_ENABLE_INOTIFYPROPERTYCHANGING_SUPPORT": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
|
||||
"CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+31d3517ecb4d813a458f2555c82d2c2ef0042c94")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@@ -1 +1 @@
|
||||
266074d04083560031f49c71b808c4004956148e7c8571689c77125a55823eea
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
||||
a0fbd74d0a18be93b28436cdb388e85f3ce80293828d38a6650fb93829c65adb
|
||||
c88df38feec8b01c639946011c191049259962fd06e0ef319562d808b56f0f26
|
||||
|
||||
@@ -24,3 +24,5 @@ D:\Workspace\GitHub\Ramitta-lib\Ramitta\obj\Debug\net8.0-windows\ref\Ramitta.dll
|
||||
D:\Workspace\GitHub\Ramitta-lib\Ramitta\obj\Debug\net8.0-windows\Themes\vsStyle.baml
|
||||
D:\Workspace\GitHub\Ramitta-lib\Ramitta\obj\Debug\net8.0-windows\Themes\CustomWindowStyle.baml
|
||||
D:\Workspace\GitHub\Ramitta-lib\Ramitta\obj\Debug\net8.0-windows\Ramitta.csproj.AssemblyReference.cache
|
||||
D:\Workspace\GitHub\Ramitta-lib\Ramitta\bin\Debug\net8.0-windows\Ramitta.runtimeconfig.json
|
||||
D:\Workspace\GitHub\Ramitta-lib\Ramitta\obj\Debug\net8.0-windows\Ramitta.genruntimeconfig.cache
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
73e155baf175caa5a9054a0594180c06e0494fd3fcb5f8ff8553471ebe3ba24f
|
||||
Binary file not shown.
@@ -1 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/31d3517ecb4d813a458f2555c82d2c2ef0042c94/*"}}
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,16 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
fab53866ff8d1289d044c284ff8adbc7a2d521efb64c7861f2571e9a0df2319c
|
||||
@@ -0,0 +1,21 @@
|
||||
is_global = true
|
||||
build_property.MvvmToolkitEnableINotifyPropertyChangingSupport = true
|
||||
build_property._MvvmToolkitIsUsingWindowsRuntimePack = false
|
||||
build_property.CsWinRTComponent =
|
||||
build_property.CsWinRTAotOptimizerEnabled =
|
||||
build_property.CsWinRTAotWarningLevel =
|
||||
build_property.TargetFramework = net8.0-windows
|
||||
build_property.TargetPlatformMinVersion = 7.0
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Ramitta
|
||||
build_property.ProjectDir = D:\Workspace\GitHub\Ramitta-lib\Ramitta\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.CsWinRTUseWindowsUIXamlProjections = false
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
@@ -0,0 +1,6 @@
|
||||
// <auto-generated/>
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
{"documents":{"D:\\Workspace\\GitHub\\Ramitta-lib\\*":"https://raw.githubusercontent.com/XerolySkinner/Ramitta-lib/e773052a85f9dccce87dd2af28c0c3c5dbd12950/*"}}
|
||||
@@ -0,0 +1,25 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e773052a85f9dccce87dd2af28c0c3c5dbd12950")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Ramitta")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
|
||||
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user