Commit c90b3aba authored by tr's avatar tr

1、基本整理

parent 14c04255
No preview for this file type
......@@ -7,8 +7,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateExecuter", "UpdateExe
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tools", "Tools\Tools.csproj", "{C5AB3CE9-C46A-467D-96E4-D80DD3BBB239}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunnyPick", "FunnyPick\FunnyPick\FunnyPick.csproj", "{061D0659-7E33-4C00-B125-4396EC665FCF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ftt.PatchPack", "Ftt.PatchPack\Ftt.PatchPack.csproj", "{42E384C1-CC13-494D-90E2-33C399E13F07}"
EndProject
Global
......@@ -45,18 +43,6 @@ Global
{C5AB3CE9-C46A-467D-96E4-D80DD3BBB239}.Release|x64.Build.0 = Release|Any CPU
{C5AB3CE9-C46A-467D-96E4-D80DD3BBB239}.Release|x86.ActiveCfg = Release|Any CPU
{C5AB3CE9-C46A-467D-96E4-D80DD3BBB239}.Release|x86.Build.0 = Release|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Debug|x64.ActiveCfg = Debug|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Debug|x64.Build.0 = Debug|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Debug|x86.ActiveCfg = Debug|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Debug|x86.Build.0 = Debug|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Release|Any CPU.Build.0 = Release|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Release|x64.ActiveCfg = Release|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Release|x64.Build.0 = Release|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Release|x86.ActiveCfg = Release|Any CPU
{061D0659-7E33-4C00-B125-4396EC665FCF}.Release|x86.Build.0 = Release|Any CPU
{42E384C1-CC13-494D-90E2-33C399E13F07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42E384C1-CC13-494D-90E2-33C399E13F07}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42E384C1-CC13-494D-90E2-33C399E13F07}.Debug|x64.ActiveCfg = Debug|Any CPU
......
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
namespace FunnyPick
{
/// <summary>
/// Author : tr
/// <para>For reference only</para>
/// </summary>
public class EasyDataTable
{
//1. When you need a dictionary
public void Example1()
{
//a temporary table
DataTable dt = new DataTable()
{
TableName = "Example",
Columns = {
{ "Name", typeof(string)},
{ "Value", typeof(string)},
},
Rows = {
{ "FtpUrl", "ftp://192.168.1.2:21" },
{ "HttpUrl", "http://192.168.1.2:8000/ftproot/erp" },
}
};
//turn it into a dictionary
var dic = dt.Rows.Cast<DataRow>().ToDictionary(x => x[0].ToString(), x => x[1].ToString());
//result : {}
}
//2. When you need a string
public void Example2()
{
//a temporary table
DataTable dt = new DataTable()
{
TableName = "Example",
Columns = {
{ "ID", typeof(int)},
{ "Name", typeof(string)},
},
Rows = {
{ 1, "name1" },
{ 2, "name2" },
{ 3, "name3" },
{ 4, "name2" },
{ 5, "name2" },
}
};
//convert to string
var list = dt.Select().AsEnumerable().Select(x => x["Name"].ToString()).Distinct();
var str = string.Join(",", list);
// result : "name1,name2,name3"
}
/// <summary>
/// 复制两表(针对同结构,不同结构只复制相同列)
/// </summary>
/// <param name="dtFrom">源表</param>
/// <param name="dtTarget">目标表</param>
/// <param name="distinctCol">去重列</param>
/// <param name="AlwaysList">总是覆盖列(即包含在此列表中的列总是复制)</param>
/// <param name="ExceptList">去除列(即包含在此列表中的列不复制)</param>
public void CopyTable(DataTable dtFrom, DataTable dtTarget, string distinctCol = "", List<string> AlwaysList = null, List<string> ExceptList = null)
{
if (dtFrom == null || dtTarget == null)
return;
//
foreach (DataRow r in dtFrom.Rows)
{
if (IsIllegalDataRow(r))
continue;
//如果去重列不为空,并且两表都包含该列,则去除重复值
if (!string.IsNullOrEmpty(distinctCol) && dtFrom.Columns.Contains(distinctCol) && dtTarget.Columns.Contains(distinctCol))
{
DataRow[] rows = dtTarget.Select($"{distinctCol}='{r[distinctCol]}'");
if (rows.Length > 0 && AlwaysList != null)
{
foreach (var s in AlwaysList)
{
if (!dtFrom.Columns.Contains(s) || !dtTarget.Columns.Contains(s))
continue;
rows[0][s] = r[s];
}
rows[0].EndEdit();
continue;
}
}
//创建目标新行
DataRow drNew = dtTarget.NewRow();
CopyRow(r, drNew, ExceptList);
dtTarget.Rows.Add(drNew);
}
}
/// <summary>
/// 复制两行(针对相同结构,不同结构只复制相同列)
/// </summary>
/// <param name="drFrom">源行</param>
/// <param name="drTarget">目标行</param>
/// <param name="ExceptList">去除列(即其中包含的列不复制到目标行)</param>
public void CopyRow(DataRow drFrom, DataRow drTarget, List<string> ExceptList = null)
{
if (drFrom == null || drTarget == null)
return;
//
foreach (DataColumn c in drFrom.Table.Columns)
{
string ColName = c.ColumnName;
//ID和指定列不复制
if (ColName.Equals("ID") || ExceptList?.IndexOf(ColName) >= 0)
continue;
if (drTarget.Table.Columns.Contains(ColName))
{
drTarget[ColName] = drFrom[ColName];
}
drTarget.EndEdit();
}
}
/// <summary>
/// 是否无效行
/// </summary>
/// <param name="dr"></param>
/// <returns></returns>
public bool IsIllegalDataRow(DataRow dr)
{
return dr == null
|| dr.RowState == DataRowState.Deleted
|| dr.RowState == DataRowState.Detached;
}
/// <summary>
/// 是否包含指定列
/// </summary>
/// <param name="dt"></param>
/// <param name="col"></param>
/// <returns></returns>
public static bool IsContainsColumn(DataTable dt, string col)
{
return dt == null ? false : dt.Columns.Contains(col);
}
/// <summary>
/// 是否包含指定列
/// </summary>
/// <param name="dv"></param>
/// <param name="col"></param>
/// <returns></returns>
public static bool IsContainsColumn(DataView dv, string col)
{
return dv == null ? false : IsContainsColumn(dv.Table, col);
}
/// <summary>
/// 是否包含指定列
/// </summary>
/// <param name="dr"></param>
/// <param name="col"></param>
/// <returns></returns>
public static bool IsContainsColumn(DataRow dr, string col)
{
return dr == null ? false : IsContainsColumn(dr.Table, col);
}
/// <summary>
/// 是否包含指定列
/// </summary>
/// <param name="drv"></param>
/// <param name="col"></param>
/// <returns></returns>
public static bool IsContainsColumn(DataRowView drv, string col)
{
return drv == null ? false : IsContainsColumn(drv.Row, col);
}
/// <summary>
/// 将指定列转为列表返回
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public static List<string> GetColumnList(DataSet ds, string ColumnName)
{
List<string> ResultList = new List<string>();
if (ds != null && ds.Tables.Count > 0)
{
ResultList = GetColumnList(ds.Tables[0], ColumnName);
}
return ResultList;
}
/// <summary>
/// 将制定列转为列表返回
/// </summary>
/// <param name="dt"></param>
/// <param name="ColumnName"></param>
/// <returns></returns>
public static List<string> GetColumnList(DataTable dt, string ColumnName)
{
List<string> ResultList = new List<string>();
if (dt != null && dt.Columns.Contains(ColumnName))
{
ResultList = dt.Select().AsEnumerable()
.Select(r => r[ColumnName].ToString())
.Distinct() //去重
.ToList();
}
return ResultList;
}
/// <summary>
/// 将制定列转为列表返回
/// </summary>
/// <param name="dt"></param>
/// <param name="ColumnName"></param>
/// <returns></returns>
public static List<string> GetColumnList(DataRow[] rows, string ColumnName)
{
List<string> ResultList = new List<string>();
if (rows != null && rows.Length > 0 && IsContainsColumn(rows[0], ColumnName))
{
ResultList = rows.AsEnumerable()
.Select(r => r[ColumnName].ToString())
.Distinct() //去重
.ToList();
}
return ResultList;
}
}
}
using System;
using System.Collections.Generic;
//
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using HtmlAgilityPack;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using RtfPipe;
//
using System.Data.SqlClient;
using System.Diagnostics;
namespace FunnyPick
{
/// <summary>
/// Excel模板导出公共类
/// </summary>
public class ExcelExportHelper
{
#region 私有变量
/// <summary>
/// Excel文件对象
/// </summary>
HSSFWorkbook _Workbook = null;
/// <summary>
/// 全局数据集
/// </summary>
DataSet _ds = null;
/// <summary>
/// 模板路径
/// </summary>
string _mouldFilePath = "";
#endregion
/// <summary>
/// 导出文件(绝对)路径
/// </summary>
public string ExportFileName { get; set; } = string.Empty;
/// <summary>
/// 自定义表名列表
/// <para>如果设置该列表,则只取列表中的表数据,否则取所有数据</para>
/// </summary>
public List<string> CustomTableList = null;
/// <summary>
/// 构造函数
/// <para>配合UnifyExport()使用</para>
/// </summary>
public ExcelExportHelper() { }
/// <summary>
/// 导出(单sheet页)
/// </summary>
/// <returns></returns>
private bool Export()
{
try
{
//填充sheet模板数据
var sheet = (HSSFSheet)this._Workbook?.GetSheetAt(0);
this.FillSheet(sheet);
//保存Excel文件
this.SaveExcel(this.ExportFileName);
}
catch (Exception ex)
{
Utils.ShowMessage($"导出失败:{ex.Message}");
return false;
}
finally
{
GC.Collect();
}
return true;
}
/// <summary>
/// 导出(多sheet页)
/// </summary>
/// <returns></returns>
private bool ExportSheets(string tableName, string groupCol)
{
try
{
//获取分组
var groupList = Utils.GetColumnList(this._ds.Tables[tableName], groupCol);
//先清除多余的sheet页
while (this._Workbook.NumberOfSheets > 1)
this._Workbook.RemoveSheetAt(1);
//按照分组创建新的sheet页, 并复制sheet0的模板格式
var sheet0 = this._Workbook?.GetSheetAt(0) as HSSFSheet;
for (int i = 0; i < groupList.Count; i++)
{
var sheet = this._Workbook.CreateSheet(groupList[i]) as HSSFSheet;
this.CopySheet(sheet0, sheet);
//填充数据
this._ds.Tables[tableName].DefaultView.RowFilter = $"{groupCol} = '{groupList[i]}'";
this.FillSheet(sheet);
}
//清除sheet0
this._Workbook.RemoveSheetAt(0);
//保存Excel文件
this.SaveExcel(this.ExportFileName);
}
catch (Exception ex)
{
Utils.ShowMessage($"导出失败:{ex.Message}");
return false;
}
finally
{
GC.Collect();
}
return true;
}
/// <summary>
/// 导出(款式SOP维护-工艺单)
/// </summary>
/// <param name="tableName"></param>
/// <param name="groupCol"></param>
/// <param name="Reclassify"></param>
/// <returns></returns>
private bool ExportSOP(string tableName, string groupCol)
{
try
{
//获取分组
var groupList = Utils.GetColumnList(this._ds.Tables[tableName], groupCol);
//按照分组创建新的sheet页, 并复制sheet0的模板格式
var sheet0 = this._Workbook?.GetSheetAt(0) as HSSFSheet; //封页
var sheet1 = this._Workbook?.GetSheetAt(1) as HSSFSheet; //工艺单汇总-模板
var sheet2 = this._Workbook?.GetSheetAt(2) as HSSFSheet; //工艺明细-模板
DataTable dt = this._ds.Tables[tableName];
this.FillSheet(sheet0);
for (int i = 0; i < groupList.Count; i++)
{
var sheetNew = this._Workbook.CreateSheet($"{groupList[i]}流程") as HSSFSheet;
this.CopySheet(sheet1, sheetNew);
//填充数据
dt.DefaultView.RowFilter = $"{groupCol} = '{groupList[i]}'";
this.FillSheet(sheetNew);
for (int rowIndex = 0; rowIndex < dt.DefaultView.Count; rowIndex++)
{
var IEName = dt.DefaultView[rowIndex]["IEName"].ToString();
var sheetNewIE = this._Workbook.CreateSheet($"{groupList[i]}{rowIndex}-{IEName.Replace(@"/", "_")}") as HSSFSheet;
this.CopySheet(sheet2, sheetNewIE);
this.FillSheet(sheetNewIE, rowIndex);
}
}
//删除模板文件
this._Workbook.RemoveSheetAt(1); //删除:工艺单汇总-模板
this._Workbook.RemoveSheetAt(1); //删除:工艺明细-模板
//保存Excel文件
this.SaveExcel(this.ExportFileName);
}
catch (Exception ex)
{
Utils.ShowMessage($"导出失败:{ex.Message}");
return false;
}
finally
{
GC.Collect();
}
return true;
}
/// <summary>
/// 导出(款式SOP维护-工艺单)
/// </summary>
/// <param name="tableName"></param>
/// <param name="groupCol"></param>
/// <param name="Reclassify"></param>
/// <returns></returns>
private bool ExportSOP1(string tableName, string groupCol, string numCol)
{
try
{
//获取分组
var groupList = Utils.GetColumnList(this._ds.Tables[tableName], groupCol);
//按照分组创建新的sheet页, 并复制sheet0的模板格式
var sheet0 = this._Workbook?.GetSheetAt(0) as HSSFSheet; //封页
var sheet1 = this._Workbook?.GetSheetAt(1) as HSSFSheet; //工艺单汇总-模板
var sheet2 = this._Workbook?.GetSheetAt(2) as HSSFSheet; //工艺明细-模板
DataTable dt = this._ds.Tables[tableName];
this.FillSheet(sheet0);
for (int i = 0; i < groupList.Count; i++)
{
var sheetNew = this._Workbook.CreateSheet($"{groupList[i]}流程") as HSSFSheet;
this.CopySheet(sheet1, sheetNew);
//填充汇总数据
dt.DefaultView.RowFilter = $"{groupCol} = '{groupList[i]}'";
this.FillSheet(sheetNew);
//根据页码渲染明细
var SheetNoList = GetSheetNoFromDefaultView(dt.DefaultView, numCol);
SheetNoList.Sort(); //排序
foreach (var n in SheetNoList)
{
dt.DefaultView.RowFilter = $"{groupCol} = '{groupList[i]}' and ISNULL({numCol},'')='{n}'";
if (dt.DefaultView.Count == 0)
continue;
var IEName = dt.DefaultView[0]["IEName"].ToString();
var sheetNewIE = this._Workbook.CreateSheet($"{groupList[i]}{n}-{IEName.Replace(@"/", "_")}") as HSSFSheet;
this.CopySheet(sheet2, sheetNewIE);
this.FillSheet(sheetNewIE);
}
}
//删除模板文件
this._Workbook.RemoveSheetAt(1); //删除:工艺单汇总-模板
this._Workbook.RemoveSheetAt(1); //删除:工艺明细-模板
//保存Excel文件
this.SaveExcel(this.ExportFileName);
}
catch (Exception ex)
{
Utils.ShowMessage($"导出失败:{ex.Message}");
return false;
}
finally
{
GC.Collect();
}
return true;
}
/// <summary>
/// 获取页号集合
/// </summary>
/// <param name="defaultView"></param>
/// <returns></returns>
private List<string> GetSheetNoFromDefaultView(DataView defaultView, string numCol)
{
var result = new List<string>();
if (Utils.IsContainsColumn(defaultView, numCol))
{
foreach (DataRowView r in defaultView)
{
var n = r[numCol].ToString();
if (result.Contains(n))
continue;
//
result.Add(n);
}
}
return result;
}
/// <summary>
/// 复制Sheet页
/// </summary>
/// <param name="from"></param>
/// <param name="to"></param>
private void CopySheet(HSSFSheet from, HSSFSheet to)
{
//逐行复制
var rows = from.GetRowEnumerator();
while (rows.MoveNext())
{
//获取复制源
var srcRow = rows.Current as HSSFRow;
if (srcRow == null)
continue;
//获取或创建目标行
var trgtRow = to.GetRow(srcRow.RowNum) as HSSFRow;
if (trgtRow == null)
{
trgtRow = to.CreateRow(srcRow.RowNum) as HSSFRow;
}
//复制行
this.CopyRow(srcRow, trgtRow);
}
//合并列处理
for (int i = 0; i < from.NumMergedRegions; i++)
{
to.AddMergedRegion(from.GetMergedRegion(i));
}
//复制打印设置
this.CopyPrintSetup(from, to);
}
/// <summary>
/// 复制行(内容、列宽、类型与格式)
/// </summary>
/// <param name="from"></param>
/// <param name="to"></param>
private void CopyRow(HSSFRow from, HSSFRow to)
{
to.Height = from.Height; //复制行高
for (int i = from.FirstCellNum; i < from.LastCellNum; i++)
{
HSSFCell sourceCell = from.GetCell(i) as HSSFCell;
if (sourceCell == null)
continue;
HSSFCell targetCell = to.CreateCell(i) as HSSFCell;
#region 复制列宽
int columnIndex = sourceCell.ColumnIndex;
int columnWidth = from.Sheet.GetColumnWidth(columnIndex);
to.Sheet.SetColumnWidth(columnIndex, columnWidth);
#endregion
targetCell.SetCellValue(sourceCell.StringCellValue); //复制值
targetCell.CellStyle = sourceCell.CellStyle; //复制单元格样式
targetCell.SetCellType(sourceCell.CellType); //复制单元格类型
}
}
/// <summary>
/// 复制打印设置
/// </summary>
/// <param name="from"></param>
/// <param name="to"></param>
public void CopyPrintSetup(HSSFSheet from, HSSFSheet to)
{
//打印设置复制
IPrintSetup s_printSetup = from.PrintSetup;
IPrintSetup t_printSetup = to.PrintSetup;
t_printSetup.Copies = s_printSetup.Copies;
t_printSetup.Draft = s_printSetup.Draft;
t_printSetup.FitHeight = s_printSetup.FitHeight;
t_printSetup.FitWidth = s_printSetup.FitWidth;
t_printSetup.FooterMargin = s_printSetup.FooterMargin;
t_printSetup.HeaderMargin = s_printSetup.HeaderMargin;
t_printSetup.HResolution = s_printSetup.HResolution;
t_printSetup.Landscape = s_printSetup.Landscape;
t_printSetup.LeftToRight = s_printSetup.LeftToRight;
t_printSetup.NoColor = s_printSetup.NoColor;
t_printSetup.NoOrientation = s_printSetup.NoOrientation;
t_printSetup.Notes = s_printSetup.Notes;
t_printSetup.PageStart = s_printSetup.PageStart;
t_printSetup.PaperSize = s_printSetup.PaperSize;
t_printSetup.Scale = s_printSetup.Scale;
t_printSetup.UsePage = s_printSetup.UsePage;
t_printSetup.ValidSettings = s_printSetup.ValidSettings;
t_printSetup.VResolution = s_printSetup.VResolution;
//边距复制
to.SetMargin(MarginType.TopMargin, from.GetMargin(MarginType.TopMargin));
to.SetMargin(MarginType.RightMargin, from.GetMargin(MarginType.RightMargin));
to.SetMargin(MarginType.BottomMargin, from.GetMargin(MarginType.BottomMargin));
to.SetMargin(MarginType.LeftMargin, from.GetMargin(MarginType.LeftMargin));
}
/// <summary>
/// 填充Sheet模板
/// </summary>
/// <param name="sheet"></param>
/// <param name="rowIndex"></param>
private void FillSheet(HSSFSheet sheet)
{
/*模板导出规则:
* 1、每行只能是一种类型,要么全部是基本信息,要么全是明细(如果混合,则按第一个绑定信息类型界定此行类型)
* 基本信息绑定格式:[表名.字段名]
* 明细信息绑定格式:(表名.字段名)
* 合并信息绑定格式:{表名.字段名}
* 二维码绑定格式:<表名.字段名>
* 2、图片必须以Image或Picture结尾,区分大小写
*/
#region 填充模板数据
int currentRow = 0;
int EmptyCounts = 0; //空行命中次数
while (EmptyCounts < 20) //如果连续空行命中超过20,则认为是文档结尾
{
//取出列与绑定信息的关系
List<BindInfo> bindList = new List<BindInfo>();
for (int col = 0; col <= 50; col++) //只处理前50列
{
ICell cell = sheet?.GetRow(currentRow)?.GetCell(col);
if (cell == null)
continue;
//记录绑定信息
string bind = cell.StringCellValue;
bool IsBaseInfo = bind.StartsWith("[") && bind.EndsWith("]");
bool IsDetailInfo = bind.StartsWith("(") && bind.EndsWith(")");
bool IsMerge = bind.StartsWith("{") && bind.EndsWith("}");
bool IsQRCode = bind.StartsWith("<") && bind.EndsWith(">");
string[] strArray = bind.Trim(new char[] { '[', ']', '(', ')', '{', '}', '<', '>' }).Split('.'); //去除括号,并分割表名与列名
if ((IsBaseInfo || IsDetailInfo || IsMerge || IsQRCode) && strArray.Length == 2)
{
bindList.Add(new BindInfo
{
TableName = strArray[0],
ColumnName = strArray[1],
CellColumn = col,
IsDetailInfo = IsDetailInfo,
IsMerge = IsMerge,
IsQRCode = IsQRCode,
});
}
}
//填充数据
int scale = 1; //不管是否绑定,行都要加1,所以这里默认为1
if (bindList.Count > 0 && this._ds.Tables[bindList[0].TableName] != null)
{
EmptyCounts = 0; //命中数据行时,清空计数
bool IsDetailInfo = bindList[0].IsDetailInfo; //同行的第1个绑定,决定该行类型
string tableName = bindList[0].TableName;
int ViewCount = this._ds.Tables.Contains(tableName) ? this._ds.Tables[tableName].DefaultView.Count : 0; //数据总行数(表不存在数据源中,当0处理)
if (IsDetailInfo && ViewCount > 1) //明细,并且多余1行时,采用插行渲染
{
int InsertRowCount = ViewCount - 1; //本来就有一行,所以:插入行数 = 数据行数 - 1
this.MyInsertRow(sheet, currentRow, InsertRowCount, (HSSFRow)sheet.GetRow(currentRow - 1)); //从当前行开始,复制当前行上一行的行格式
for (int i = 0; i <= InsertRowCount; i++)
{
foreach (BindInfo bind in bindList)
{
ICell cell = sheet?.GetRow(currentRow + i).GetCell(bind.CellColumn);
this.LoadData(cell, bind, RowIndex: i);
}
}
//赋值标量:插入行数大于1时,标量 = 插入行数
if (InsertRowCount > scale)
scale = InsertRowCount;
}
else
{
foreach (BindInfo bind in bindList)
{
ICell cell = sheet?.GetRow(currentRow).GetCell(bind.CellColumn);
if (bind.IsMerge)
this.LoadDataMerge(cell, bind);
else
this.LoadData(cell, bind);
}
}
}
else
{
EmptyCounts++;
}
//行数累加
currentRow += scale;
}
#endregion
}
/// <summary>
/// 填充Sheet模板:单行渲染
/// </summary>
/// <param name="sheet"></param>
/// <param name="rowIndex"></param>
private void FillSheet(HSSFSheet sheet, int rowIndex)
{
/*模板导出规则:
* 1、每行只能是一种类型,要么全部是基本信息,要么全是明细(如果混合,则按第一个绑定信息类型界定此行类型)
* 基本信息绑定格式:[表名.字段名]
* 明细信息绑定格式:(表名.字段名)
* 合并信息绑定格式:{表名.字段名}
* 二维码绑定格式:<表名.字段名>
* 2、图片必须以Image或Picture结尾,区分大小写
*/
#region 填充模板数据
int currentRow = 0;
int EmptyCounts = 0; //空行命中次数
while (EmptyCounts < 20) //如果连续空行命中超过20,则认为是文档结尾
{
//取出列与绑定信息的关系
List<BindInfo> bindList = new List<BindInfo>();
for (int col = 0; col <= 50; col++) //只处理前50列
{
ICell cell = sheet?.GetRow(currentRow)?.GetCell(col);
if (cell == null)
continue;
//记录绑定信息
string bind = cell.StringCellValue;
bool IsBaseInfo = bind.StartsWith("[") && bind.EndsWith("]");
bool IsDetailInfo = bind.StartsWith("(") && bind.EndsWith(")");
bool IsMerge = bind.StartsWith("{") && bind.EndsWith("}");
bool IsQRCode = bind.StartsWith("<") && bind.EndsWith(">");
string[] strArray = bind.Trim(new char[] { '[', ']', '(', ')', '{', '}', '<', '>' }).Split('.'); //去除括号,并分割表名与列名
if ((IsBaseInfo || IsDetailInfo || IsMerge || IsQRCode) && strArray.Length == 2)
{
bindList.Add(new BindInfo
{
TableName = strArray[0],
ColumnName = strArray[1],
CellColumn = col,
IsDetailInfo = IsDetailInfo,
IsMerge = IsMerge,
IsQRCode = IsQRCode,
});
}
}
//填充数据
int scale = 1; //不管是否绑定,行都要加1,所以这里默认为1
if (bindList.Count > 0)
{
EmptyCounts = 0; //命中数据行时,清空计数
foreach (BindInfo bind in bindList)
{
ICell cell = sheet?.GetRow(currentRow).GetCell(bind.CellColumn);
this.LoadData(cell, bind, rowIndex);
}
}
else
{
EmptyCounts++;
}
//行数累加
currentRow += scale;
}
#endregion
}
/// <summary>
/// 加载单元格数据
/// </summary>
/// <param name="cell"></param>
/// <param name="bind"></param>
/// <param name="RowIndex"></param>
private void LoadData(ICell cell, BindInfo bind, int RowIndex = 0)
{
if (cell == null)
return;
string TableName = bind.TableName; //表名
string ColumnName = bind.ColumnName; //列名
bool IsImage = ColumnName.EndsWith("Image") || ColumnName.EndsWith("Picture"); //图片列规范:必须以Image或Picture结尾,区分大小写
if (this._ds.Tables.Contains(TableName) && this._ds.Tables[TableName].DefaultView.Count > 0 && this._ds.Tables[TableName].Columns.Contains(ColumnName))
{
cell.SetCellValue(""); //先清除单元格信息
var dr = this._ds.Tables[TableName].DefaultView[RowIndex];
if (IsImage)
{
#region 加载图片
try
{
//图片列非空,并且是byte[]类型才处理
if (dr[ColumnName] != DBNull.Value && dr[ColumnName].GetType().Name.ToLower().Equals("byte[]"))
{
byte[] bytes = dr[ColumnName] as byte[];
if (bytes.Length == 0)
return;
bool IsSegment = bytes.Length.Equals(32); //是否进行图片分离
var img = IsSegment ? Utils.FetchImageSingle(bytes) : bytes;
var range = this.GetMergedRange(cell);
this.LoadImage(cell, img, range);
}
}
catch (Exception ex)
{
//Utils.Write($"加载图片出错:{ex.Message}");
}
#endregion
}
else if (bind.IsQRCode)
{
#region 二维码处理
var str = dr[ColumnName].ToString();
if (string.IsNullOrEmpty(str))
return;
var bytes = Utils.GenQRCode(dr[ColumnName].ToString());
if (bytes == null || bytes.Length == 0)
return;
var range = this.GetMergedRange(cell);
this.LoadImage(cell, bytes, range);
#endregion
}
else
{
cell.SetCellValue(dr[ColumnName].ToString());
}
}
else
{
//不存在的列名或表名,直接清空
cell.SetCellValue("");
}
}
/// <summary>
/// 绘制图片
/// </summary>
/// <param name="cell"></param>
/// <param name="bytes"></param>
/// <param name="range"></param>
private void LoadImage(ICell cell, byte[] bytes, CellRangeAddress range)
{
if (bytes.Length == 0)
return;
//获取单元格对应的Sheet页
HSSFSheet sheet = cell.Sheet as HSSFSheet;
//取出图片宽高
var ms = new MemoryStream(bytes);
Bitmap bmp = new Bitmap(ms);
var height = bmp.Height;
var width = bmp.Width;
// 图片位置空间的高度
short AreaHeight = 0;
for (int i = 1; i <= range.LastRow - range.FirstRow + 1; i++)
AreaHeight += sheet.GetRow(i).Height;
//根据宽高比计算出宽度
int AreaWidth = AreaHeight * width / height;
//获取图片索引
int picIndex = sheet.Workbook.AddPicture(bytes, PictureType.JPEG);
//创建图片锚点
var anchor = new HSSFClientAnchor()
{
Col1 = range.FirstColumn, //起始列
Col2 = range.LastColumn, //结束列
Row1 = range.FirstRow, //起始行
Row2 = range.LastRow, //结束行
//说明:此处的x和y可看做相对于左上边框的偏移位置;左上(dx1,dy1)和右下(dx2,dy2)分别可看做矩形框的对角顶点,图片在此矩形内绘制
Dx1 = 0,
Dy1 = 0, //起始单元格中的x,y坐标
Dx2 = AreaWidth,
Dy2 = AreaHeight //结束单元格中的x, y坐标
};
//重新绘制图片
IDrawing patriarch = this.GetSheetDrawingObject(sheet);
var pict = (HSSFPicture)patriarch.CreatePicture(anchor, picIndex);
bmp.Dispose();
ms.Close();
}
#region 多行合并渲染
/// <summary>
/// 加载单元格数据
/// </summary>
/// <param name="cell"></param>
/// <param name="bind"></param>
/// <param name="RowIndex"></param>
private void LoadDataMerge(ICell cell, BindInfo bind)
{
if (cell == null)
return;
string TableName = bind.TableName; //表名
string ColumnName = bind.ColumnName; //列名
bool IsImage = ColumnName.EndsWith("Image") || ColumnName.EndsWith("Picture"); //图片列规范:必须以Image或Picture结尾,区分大小写
if (this._ds.Tables.Contains(TableName) && this._ds.Tables[TableName].DefaultView.Count > 0 && this._ds.Tables[TableName].Columns.Contains(ColumnName))
{
if (IsImage)
{
cell.SetCellValue(""); //先清除单元格信息
#region 加载图片
try
{
//获取单元格范围
int CellRow = cell.RowIndex;
int CellCol = cell.ColumnIndex;
var range = cell.IsMergedCell ? this.GetMergedRange(cell) : new CellRangeAddress(CellRow, CellRow, CellCol, CellCol);
//循环当前视图,填充图片
int index = 0;
foreach (DataRowView r in this._ds.Tables[TableName].DefaultView)
{
//图片列非空,并且是byte[]类型才处理
if (r[ColumnName] != DBNull.Value && r[ColumnName].GetType().Name.ToLower().Equals("byte[]"))
{
byte[] bytes = r[ColumnName] as byte[];
if (bytes.Length == 0)
continue;
bool IsSegment = bytes.Length.Equals(32); //是否进行图片分离
var img = IsSegment ? Utils.FetchImageSingle(bytes) : bytes;
//加载图片
this.LoadImageMerge(cell, img, range, index);
index++;
}
}
}
catch (Exception ex)
{
//Utils.Write($"加载图片出错:{ex.Message}");
}
#endregion
}
else
{
var mergeStrList = new List<string>();
foreach (DataRowView r in this._ds.Tables[TableName].DefaultView)
{
mergeStrList.Add(r[ColumnName].ToString().Trim());
}
cell.SetCellValue(string.Join("\r\n", mergeStrList));
}
}
else
{
//不存在的列名或表名,直接清空
cell.SetCellValue("");
}
}
/// <summary>
/// 绘制图片
/// </summary>
/// <param name="cell"></param>
/// <param name="bytes"></param>
/// <param name="range"></param>
private void LoadImageMerge(ICell cell, byte[] bytes, CellRangeAddress range, int index)
{
if (bytes.Length == 0)
return;
//获取单元格对应的Sheet页
HSSFSheet sheet = cell.Sheet as HSSFSheet;
int Columnlndex = range.FirstColumn + index;
//取出图片宽高
var ms = new MemoryStream(bytes);
Bitmap bmp = bmp = new Bitmap(ms);
var height = bmp.Height;
var width = bmp.Width;
// 图片位置空间的高度
short AreaHeight = 0;
for (int i = 0; i <= range.LastRow - range.FirstRow; i++)
AreaHeight += sheet.GetRow(i).Height;
//根据列宽填充(在一个合并区域里,每个图片占一列)
int AreaWidth = sheet.GetColumnWidth(Columnlndex);
//获取图片索引
int picIndex = sheet.Workbook.AddPicture(bytes, PictureType.JPEG);
//创建图片锚点
var anchor = new HSSFClientAnchor()
{
Col1 = Columnlndex, //起始列
Col2 = Columnlndex, //结束列
Row1 = range.FirstRow, //起始行
Row2 = range.LastRow, //结束行
//说明:此处的x和y可看做相对于左上边框的偏移位置;左上(dx1,dy1)和右下(dx2,dy2)分别可看做矩形框的对角顶点,图片在此矩形内绘制
Dx1 = 0,
Dy1 = 0, //起始单元格中的x,y坐标
Dx2 = AreaWidth,
Dy2 = AreaHeight //结束单元格中的x, y坐标
};
//重新绘制图片
IDrawing patriarch = this.GetSheetDrawingObject(sheet);
var pict = (HSSFPicture)patriarch.CreatePicture(anchor, picIndex);
bmp.Dispose();
ms.Close();
}
#endregion
/// <summary>
/// 获取绘图对象
/// </summary>
/// <param name="sheet"></param>
/// <returns></returns>
private IDrawing GetSheetDrawingObject(HSSFSheet sheet)
{
IDrawing result = null;
try
{
// 第一次取不到居然会有异常抛出...
result = sheet.DrawingPatriarch;
}
catch
{
result = sheet.CreateDrawingPatriarch();
}
return result;
}
/// <summary>
/// 获取合并列区域
/// </summary>
/// <param name="CellRow"></param>
/// <param name="CellCol"></param>
/// <returns></returns>
private CellRangeAddress GetMergedRange(ICell cell)
{
CellRangeAddress result = null;
if (cell.IsMergedCell)
{
HSSFSheet sheet = cell.Sheet as HSSFSheet;
for (int i = 0; i < sheet.NumMergedRegions; i++)
{
CellRangeAddress range = sheet.GetMergedRegion(i);
if ((cell.RowIndex >= range.FirstRow && cell.RowIndex <= range.LastRow)
&& (cell.ColumnIndex >= range.FirstColumn && cell.ColumnIndex <= range.LastColumn))
{
result = range;
break;
}
}
}
else
{
int row = cell.RowIndex;
int col = cell.ColumnIndex;
result = new CellRangeAddress(row, row, col, col);
}
return result;
}
/// <summary>
/// 批量插入复制行
/// </summary>
/// <param name="sheet">Excel页</param>
/// <param name="RowStart">起始行</param>
/// <param name="RowCount">(插入)总行数</param>
/// <param name="sourceRow">(复制)源</param>
private void MyInsertRow(HSSFSheet sheet, int RowStart, int RowCount, HSSFRow sourceRow)
{
//插入行数为0时,直接返回
if (RowCount <= 0)
return;
#region 批量移动行
sheet.ShiftRows(
RowStart, //--开始行
sheet.LastRowNum, //--结束行
RowCount, //--插入行数
true, //是否复制行高
false, //是否重置行高
true //是否移动批注
);
#endregion
#region 创建行,并复制rowSource行的格式
//首行特殊处理,并且后续各行行高要与首行一致
HSSFRow firstTargetRow = sheet.GetRow(RowStart) as HSSFRow;
//复制单元格样式(除了第一行,第一行的行已经存在,这里处理未创建的行)
for (int i = RowStart; i < RowStart + RowCount; i++)
{
HSSFRow targetRow = null;
HSSFCell sourceCell = null;
HSSFCell targetCell = null;
targetRow = i == RowStart ? firstTargetRow : sheet.CreateRow(i) as HSSFRow;
targetRow.Height = firstTargetRow.Height; //复制与首行保持一致
for (int m = sourceRow.FirstCellNum; m < sourceRow.LastCellNum; m++)
{
sourceCell = sourceRow.GetCell(m) as HSSFCell;
if (sourceCell == null) continue;
targetCell = targetRow.CreateCell(m) as HSSFCell;
targetCell.CellStyle = sourceCell.CellStyle;
targetCell.SetCellType(sourceCell.CellType);
//合并列处理
if (sourceCell.IsMergedCell)
{
var range = this.GetMergedRange(sourceCell);
//这里的行跨度都是1,所以主要处理列
var newRange = new CellRangeAddress(i, i, range.FirstColumn, range.LastColumn);
sheet.AddMergedRegion(newRange);
}
}
}
            #endregion
        }
/// <summary>
/// 获取Excel文件对象
/// </summary>
/// <param name="FileName"></param>
/// <returns></returns>
private HSSFWorkbook GetWorkbook(string FileName)
{
HSSFWorkbook wb = null;
try
{
FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite);
wb = new HSSFWorkbook(fs);
fs.Close();
}
catch (Exception ex)
{
Utils.ShowMessage(ex.Message);
}
return wb;
}
/// <summary>
/// 保存Excel文件
/// </summary>
/// <param name="fileName"></param>
private void SaveExcel(string fileName)
{
using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
this._Workbook?.Write(fs);
fs.Close();
}
}
/// <summary>
/// 设置单元格的值
/// </summary>
/// <param name="sheet">工作表</param>
/// <param name="row">行</param>
/// <param name="col">列</param>
/// <param name="val">值</param>
private void SetCellValue(HSSFSheet sheet, int row, int col, string val)
{
var ExcelRow = sheet.GetRow(row);
if (ExcelRow == null)
{
ExcelRow = new HSSFRow(this._Workbook, sheet, row);
}
var cell = ExcelRow.GetCell(col);
if (cell != null)
{
cell.SetCellValue(val);
}
else
{
cell = ExcelRow.CreateCell(col);
cell.SetCellValue(val);
}
}
/// <summary>
/// 设置单元格的值(数字类型的单元格,如果填充字符串 左上角会有角标)
/// </summary>
/// <param name="sheet">工作表</param>
/// <param name="row">行</param>
/// <param name="col">列</param>
/// <param name="val">值</param>
private void SetCellValue(HSSFSheet sheet, int row, int col, double val)
{
var cell = sheet.GetRow(row)?.GetCell(col);
if (cell != null)
cell.SetCellValue(val);
}
/// <summary>
/// 设置 合并单元格
/// </summary>
/// <param name="sheet"></param>
/// <param name="rowstart"></param>
/// <param name="rowend"></param>
/// <param name="colstart"></param>
/// <param name="colend"></param>
private void SetMergedCell(HSSFSheet sheet, int rowstart, int rowend, int colstart, int colend)
{
CellRangeAddress range = new CellRangeAddress(rowstart, rowend, colstart, colend);
sheet.AddMergedRegion(range);
}
#region 数据源处理
/// <summary>
/// 获取导出Excel的数据源
/// </summary>
/// <param name="xmlName"></param>
/// <returns></returns>
public DataSet GetDataFromXml(string xmlName, int keyID)
{
DataSet result = new DataSet();
if (string.IsNullOrEmpty(xmlName))
return result;
if (!xmlName.EndsWith(".xml"))
{
xmlName += ".xml";
}
var xmlPath = $@"{Utils.ConfigFilePath}\{xmlName}";
if (!File.Exists(xmlPath))
return result;
XDocument xml = XDocument.Load(xmlPath);
var tables = xml.Root.Element("ExcelExport").Elements("Table");
using (SqlCommand cmd = new SqlCommand())
{
foreach (XElement e in tables)
{
//Name为必须字段,其他都为非必须字段
string Name = e.Attribute("Name").Value;
//做过滤,部分多数据源,可提高查询速度
if (CustomTableList != null && CustomTableList.Count > 0 && !CustomTableList.Contains(Name))
continue;
//
string IsConvert = e.Attribute("IsConvert")?.Value;
string NameCol = e.Attribute("NameCol")?.Value;
string ValueCol = e.Attribute("ValueCol")?.Value;
string SumValueCol = e.Attribute("SumValueCol")?.Value;
string IsRtf = e.Attribute("IsRtf")?.Value;
string sql = e.Value;
//DataTable dt = cmd.e(sql, CommandType.Text, new System.Data.SqlClient.SqlParameter("ID", keyID)).Tables[0];
//dt = this.ConvertTable(dt, Name, IsConvert, NameCol, ValueCol, SumValueCol, IsRtf);
//if (!result.Tables.Contains(Name))
//{
// result.Tables.Add(dt);
//}
}
}
return result;
}
/// <summary>
/// 转换数据源(主要是行转列和表名赋值)
/// </summary>
/// <param name="dt"></param>
/// <param name="name"></param>
/// <param name="isConvert"></param>
/// <param name="nameCol"></param>
/// <param name="valueCol"></param>
/// <param name="SumValueCol"></param>
/// <param name="IsRtf"></param>
/// <returns></returns>
private DataTable ConvertTable(DataTable dt, string name, string isConvert, string nameCol, string valueCol, string SumValueCol, string IsRtf)
{
DataTable result = dt.Clone();
if (Utils.UConvert.ToBool(isConvert) && dt.Columns.Contains(nameCol) && dt.Columns.Contains(valueCol))
{
//添加合计列
bool IsNeedSum = !string.IsNullOrEmpty(SumValueCol);
if (IsNeedSum && !result.Columns.Contains(SumValueCol))
{
result.Columns.Add(SumValueCol, typeof(string));
}
//生成行转列所需列
List<string> nameList = Utils.GetColumnList(dt, nameCol);
nameList.Sort();
foreach (string s in nameList)
{
result.Columns.Add(s, typeof(string));
}
//填充行转列数据
List<string> ExceptList = new List<string> { nameCol, valueCol };
for (int i = 0; i < dt.Rows.Count; i += nameList.Count)
{
DataRow drNew = result.NewRow();
Utils.CopyRow(dt.Rows[i], drNew, ExceptList);
decimal sum = 0;
for (int n = i; n < i + nameList.Count; n++)
{
string col = dt.Rows[n][nameCol].ToString();
string val = dt.Rows[n][valueCol].ToString();
drNew[col] = val;
if (IsNeedSum)
{
sum += decimal.Round(Convert.ToDecimal(val), 2);
}
}
if (IsNeedSum)
{
drNew[SumValueCol] = sum.ToString("0.##");
}
drNew.EndEdit();
result.Rows.Add(drNew);
}
}
else
{
if (Utils.UConvert.ToBool(IsRtf) && dt.DefaultView.Count > 0)
{
this.ConvertRtfToString(dt.DefaultView[0].Row);
}
Utils.CopyTable(dt, result, AlwaysList: new List<string> { "ID" });
}
result.TableName = name;
return result;
}
/// <summary>
/// 将rtf文件转为字符串(目前主要是文本内容,可以简单如下处理)
/// </summary>
/// <param name="dr"></param>
private void ConvertRtfToString(DataRow dr)
{
string rtfText = Utils.DownloadRtf(dr["Remark"].ToString());
// 依赖RtfPipe
string html = Rtf.ToHtml(rtfText);
//依赖HtmlAgilityPack
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var htmlNodes = doc.DocumentNode.SelectNodes("//p").ToList();
string result = "";
foreach (HtmlNode n in htmlNodes)
{
result += $"{n.InnerText}\r\n";
}
dr["Remark"] = result;
dr.EndEdit();
}
#endregion
#region 统一导出接口
/// <summary>
/// 统一导出接口(SOP定制)
/// </summary>
/// <param name="lnk">标签控件</param>
/// <param name="xml">xml配置文件</param>
/// <param name="keyID">主键ID</param>
/// <param name="m">导出模型</param>
/// <param name="exportPath">导出路径</param>
public void UnifyExportSOP(string xml, int keyID, ExportModel m, string mName)
{
if (m == null)
{
Utils.ThrowErrorMessage("导出Excel必须设置导出模型!");
return;
}
//全局变量初始化
this._ds = this.GetDataFromXml(xml, keyID);
this._mouldFilePath = $@"{Utils.ExcelTemplateFilePath}\{m.UniquePrefix}{mName}";
this._Workbook = this.GetWorkbook(this._mouldFilePath);
this.ExportFileName = this.GetExportFileFullName();
//如未显式指定导出模型,则从配置文件读取
bool IsSuccess = this.ExportSOP1(m.GroupTableName, m.GroupColumnName, m.ReclassifyColumnName);
if (IsSuccess)
{
Process.Start(this.ExportFileName);
}
}
/// <summary>
/// 统一导出接口
/// </summary>
/// <param name="lnk">标签控件</param>
/// <param name="xml">xml配置文件</param>
/// <param name="keyID">主键ID</param>
/// <param name="m">导出模型</param>
/// <param name="exportPath">导出路径</param>
//public void UnifyExport(LinkLabel lnk, string xml, int keyID, ExportModel m = null, string exportPath = "")
//{
// //赋值全局数据源
// this._ds = this.GetDataFromXml(xml, keyID);
// //模板导出路径
// this.ExportFileName = this.GetExportFileFullName(exportPath);
// //如未显式指定导出模型,则从配置文件读取
// if (m == null)
// m = Utils.GetExportModel(xml);
// //显示上下文菜单
// this.ShowContextMenu(lnk, m);
//}
/// <summary>
/// 统一导出接口
/// </summary>
/// <param name="lnk">标签控件</param>
/// <param name="ds">数据源</param>
/// <param name="m">导出模型</param>
//public void UnifyExport(LinkLabel lnk, DataSet ds, ExportModel m)
//{
// if (ds == null || m == null)
// {
// Utils.ThrowErrorMessage("导出Excel必须赋值数据源和导出模型!");
// return;
// }
// //赋值全局数据源
// this._ds = ds;
// //模板导出路径
// this.ExportFileName = this.GetExportFileFullName();
// //显示上下文菜单
// this.ShowContextMenu(lnk, m);
//}
/// <summary>
/// 获取导出文件全名
/// </summary>
/// <param name="exportPath"></param>
/// <returns></returns>
private string GetExportFileFullName(string exportPath = "")
{
string path = "";
string tmpName = $"Excel导出临时文件-{DateTime.Now.ToString("yyyMMdd-hhmmss")}.xls";
if (string.IsNullOrEmpty(exportPath) || !Directory.Exists(exportPath))
{
path = Path.Combine(Utils.StartupPath, "temp", tmpName);
}
else
{
path = Path.Combine(exportPath, tmpName);
}
return path;
}
/// <summary>
/// 显示上下文菜单
/// </summary>
/// <param name="lnk"></param>
/// <param name="UniquePrefix"></param>
//private void ShowContextMenu(LinkLabel lnk, ExportModel m)
//{
// //根据模板目录创建下拉菜单项(显示时去掉统一前缀,简洁显示)
// DirectoryInfo directory = new DirectoryInfo(Utils.ExcelTemplateFilePath);
// var items = directory.GetFiles().Where(f => f.Name.IndexOf(m.UniquePrefix) == 0)
// .Select(p => new MenuItem(p.Name.Replace(m.UniquePrefix, ""), new EventHandler(MenuItem_Click)) { Tag = m })
// .ToArray();
// if (items.Length == 0)
// {
// Utils.ShowMessage("请先配置模板信息!");
// return;
// }
// //创建菜单并显示
// //ContextMenu cm = new ContextMenu();
// //cm.MenuItems.AddRange(items);
// //cm.Show(lnk, new Point(0, lnk.Height));
//}
/// <summary>
/// 模板项点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
//private void MenuItem_Click(object sender, EventArgs e)
//{
// var item = sender as MenuItem;
// if (string.IsNullOrEmpty(item.Text))
// return;
// try
// {
// Utils.ShowWaitDialog("正在导出Excel文件, 请稍候!", "Exporting excel file, please wait!");
// //打开模板
// var m = item.Tag as ExportModel;
// this._mouldFilePath = $@"{Utils.ExcelTemplateFilePath}\{m.UniquePrefix}{item.Text}";
// this._Workbook = this.GetWorkbook(this._mouldFilePath);
// //根据设置导出
// bool IsSuccess = false;
// if (!string.IsNullOrEmpty(m.GroupTableName.Trim()) && !string.IsNullOrEmpty(m.GroupColumnName.Trim()))
// {
// IsSuccess = this.ExportSheets(m.GroupTableName, m.GroupColumnName);
// }
// else
// {
// IsSuccess = this.Export();
// }
// //成功时,打开文件
// if (IsSuccess)
// {
// Process.Start(this.ExportFileName);
// }
// }
// finally
// {
// Utils.CloseWaitDialog();
// }
//}
#endregion
}
/// <summary>
/// 绑定信息
/// </summary>
class BindInfo
{
/// <summary>
/// 表名
/// </summary>
public string TableName { get; set; }
/// <summary>
/// 列名
/// </summary>
public string ColumnName { get; set; }
/// <summary>
/// 单元格的列序号
/// </summary>
public int CellColumn { get; set; }
/// <summary>
/// 是否明细信息
/// </summary>
public bool IsDetailInfo { get; set; }
/// <summary>
/// 是否合并
/// </summary>
public bool IsMerge { get; set; }
/// <summary>
/// 是否二维码
/// </summary>
public bool IsQRCode { get; set; }
}
/// <summary>
/// Excel导出模型
/// </summary>
public class ExportModel
{
/// <summary>
/// 模板唯一前缀(通过该前缀,初始化上下文菜单选项)
/// </summary>
public string UniquePrefix { get; set; }
/// <summary>
/// 分组的表名(不需要分组是给空)
/// </summary>
public string GroupTableName { get; set; }
/// <summary>
/// 分组的列名(不需要分组是给空)
/// </summary>
public string GroupColumnName { get; set; }
/// <summary>
/// 二级分类列名(用于多行合并到一个Sheet页)
/// </summary>
public string ReclassifyColumnName { get; set; }
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.24" />
<PackageReference Include="NPOI" Version="2.5.1" />
<PackageReference Include="RtfPipe" Version="1.0.7388.1242" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.1" />
</ItemGroup>
</Project>
using System.Data;
using System.Data.SqlClient;
namespace FunnyPick
{
internal class MySqlCommand : System.IDisposable
{
public void Dispose()
{
//TO DO: Support for using syntax
}
public DataTable Execute(string sql, CommandType type, params SqlParameter[] pars)
{
DataTable result = new DataTable();
SqlConnection conn = new SqlConnection(Utils.SqlServerLinkString);
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.CommandType = type;
cmd.Parameters.AddRange(pars);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
ada.FillSchema(result, SchemaType.Mapped);
return result;
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
namespace FunnyPick
{
public static class Utils
{
public static string SqlServerLinkString => "Password=test;Persist Security Info=True;User ID=sa;Initial Catalog=TestDB;Data Source=.";
public static string StartupPath => AppContext.BaseDirectory;
public static string XmlPath => $@"{AppContext.BaseDirectory}\xml";
public static string ExcelTemplateFilePath => AppContext.BaseDirectory;
public static object ConfigFilePath { get; internal set; }
public static class UConvert
{
public static bool ToBool(object o)
{
bool result = false;
var b = bool.TryParse(o.ToString(), out result);
return result;
}
public static Decimal ToDecimal(object o, int decimals)
{
decimal result = 0;
var dec = decimal.TryParse(o.ToString(), out result);
return decimal.Round(result, decimals);
}
}
internal static void ShowMessage(string v)
{
throw new NotImplementedException();
}
internal static List<string> GetColumnList(DataTable dt, string groupCol)
{
return dt.Select().AsEnumerable().Select(x => x[groupCol].ToString()).Distinct().ToList();
}
/// <summary>
/// 复制两表(针对同结构,不同结构只复制相同列)
/// </summary>
/// <param name="dtFrom">源表</param>
/// <param name="dtTarget">目标表</param>
/// <param name="distinctCol">去重列</param>
/// <param name="AlwaysList">总是覆盖列(即包含在此列表中的列总是复制)</param>
/// <param name="ExceptList">去除列(即包含在此列表中的列不复制)</param>
internal static void CopyTable(DataTable dtFrom, DataTable dtTarget, string distinctCol = "", List<string> AlwaysList = null, List<string> ExceptList = null)
{
if (dtFrom == null || dtTarget == null)
return;
//
foreach (DataRow r in dtFrom.Rows)
{
if (IsIllegalDataRow(r))
continue;
//如果去重列不为空,并且两表都包含该列,则去除重复值
if (!string.IsNullOrEmpty(distinctCol) && dtFrom.Columns.Contains(distinctCol) && dtTarget.Columns.Contains(distinctCol))
{
DataRow[] rows = dtTarget.Select($"{distinctCol}='{r[distinctCol]}'");
if (rows.Length > 0 && AlwaysList != null)
{
foreach (var s in AlwaysList)
{
if (!dtFrom.Columns.Contains(s) || !dtTarget.Columns.Contains(s))
continue;
rows[0][s] = r[s];
}
rows[0].EndEdit();
continue;
}
}
//创建目标新行
DataRow drNew = dtTarget.NewRow();
CopyRow(r, drNew, ExceptList);
dtTarget.Rows.Add(drNew);
}
}
/// <summary>
/// 复制两行(针对相同结构,不同结构只复制相同列)
/// </summary>
/// <param name="drFrom">源行</param>
/// <param name="drTarget">目标行</param>
/// <param name="ExceptList">去除列(即其中包含的列不复制到目标行)</param>
internal static void CopyRow(DataRow drFrom, DataRow drTarget, List<string> ExceptList = null)
{
if (drFrom == null || drTarget == null)
return;
//
foreach (DataColumn c in drFrom.Table.Columns)
{
string ColName = c.ColumnName;
//ID和指定列不复制
if (ColName.Equals("ID") || ExceptList?.IndexOf(ColName) >= 0)
continue;
if (drTarget.Table.Columns.Contains(ColName))
{
drTarget[ColName] = drFrom[ColName];
}
drTarget.EndEdit();
}
}
/// <summary>
/// 是否无效行
/// </summary>
/// <param name="dr"></param>
/// <returns></returns>
internal static bool IsIllegalDataRow(DataRow dr)
{
return dr == null
|| dr.RowState == DataRowState.Deleted
|| dr.RowState == DataRowState.Detached;
}
internal static string DownloadRtf(string v)
{
throw new NotImplementedException();
}
internal static byte[] FetchImageSingle(byte[] bytes)
{
throw new NotImplementedException();
}
internal static byte[] GenQRCode(string v)
{
throw new NotImplementedException();
}
internal static void CloseWaitDialog()
{
throw new NotImplementedException();
}
internal static ExportModel GetExportModel(string xml)
{
throw new NotImplementedException();
}
internal static bool IsContainsColumn(DataView defaultView, string numCol)
{
throw new NotImplementedException();
}
internal static void ShowWaitDialog(string v1, string v2)
{
throw new NotImplementedException();
}
internal static void ThrowErrorMessage(string v)
{
throw new NotImplementedException();
}
}
}
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v3.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.0": {
"FunnyPick/1.0.0": {
"dependencies": {
"HtmlAgilityPack": "1.11.24",
"NPOI": "2.5.1",
"RtfPipe": "1.0.7388.1242",
"System.Data.SqlClient": "4.8.1",
"System.Windows.Forms": "4.0.0.0"
},
"runtime": {
"FunnyPick.dll": {}
}
},
"HtmlAgilityPack/1.11.24": {
"runtime": {
"lib/netstandard2.0/HtmlAgilityPack.dll": {
"assemblyVersion": "1.11.24.0",
"fileVersion": "1.11.24.0"
}
}
},
"Microsoft.NETCore.Platforms/3.1.0": {},
"Microsoft.NETCore.Targets/1.1.0": {},
"Microsoft.Win32.Primitives/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"Microsoft.Win32.Registry/4.7.0": {
"dependencies": {
"System.Security.AccessControl": "4.7.0",
"System.Security.Principal.Windows": "4.7.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
},
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
}
},
"Microsoft.Win32.SystemEvents/4.5.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
}
},
"NETStandard.Library/1.6.1": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.Win32.Primitives": "4.3.0",
"System.AppContext": "4.3.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Console": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tools": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Calendars": "4.3.0",
"System.IO": "4.3.0",
"System.IO.Compression": "4.3.0",
"System.IO.Compression.ZipFile": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Linq": "4.3.0",
"System.Linq.Expressions": "4.3.0",
"System.Net.Http": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Net.Sockets": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Security.Cryptography.X509Certificates": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Timer": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0",
"System.Xml.XDocument": "4.3.0"
}
},
"NPOI/2.5.1": {
"dependencies": {
"Portable.BouncyCastle": "1.8.6",
"SharpZipLib": "1.2.0",
"System.Configuration.ConfigurationManager": "4.5.0",
"System.Drawing.Common": "4.5.0"
},
"runtime": {
"lib/netstandard2.0/NPOI.OOXML.dll": {
"assemblyVersion": "2.5.1.0",
"fileVersion": "2.5.1.0"
},
"lib/netstandard2.0/NPOI.OpenXml4Net.dll": {
"assemblyVersion": "2.5.1.0",
"fileVersion": "2.5.1.0"
},
"lib/netstandard2.0/NPOI.OpenXmlFormats.dll": {
"assemblyVersion": "2.5.1.0",
"fileVersion": "2.5.1.0"
},
"lib/netstandard2.0/NPOI.dll": {
"assemblyVersion": "2.5.1.0",
"fileVersion": "2.5.1.0"
}
}
},
"Portable.BouncyCastle/1.8.6": {
"runtime": {
"lib/netstandard2.0/BouncyCastle.Crypto.dll": {
"assemblyVersion": "1.8.6.0",
"fileVersion": "1.8.6.1"
}
}
},
"RtfPipe/1.0.7388.1242": {
"dependencies": {
"NETStandard.Library": "1.6.1"
},
"runtime": {
"lib/netstandard1.0/RtfPipe.dll": {
"assemblyVersion": "1.0.7388.1242",
"fileVersion": "1.0.7388.1242"
}
}
},
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.native.System/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.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.native.System.IO.Compression/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.Net.Http/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.Security.Cryptography.Apple/4.3.0": {
"dependencies": {
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
}
},
"runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"dependencies": {
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {},
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.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.2.0": {
"runtime": {
"lib/netstandard2.0/ICSharpCode.SharpZipLib.dll": {
"assemblyVersion": "1.2.0.246",
"fileVersion": "1.2.0.246"
}
}
},
"System.AppContext/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Buffers/4.3.0": {
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Collections/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Collections.Concurrent/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Configuration.ConfigurationManager/4.5.0": {
"dependencies": {
"System.Security.Cryptography.ProtectedData": "4.5.0",
"System.Security.Permissions": "4.5.0"
},
"runtime": {
"lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": {
"assemblyVersion": "4.0.1.0",
"fileVersion": "4.6.26515.6"
}
}
},
"System.Console/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Data.SqlClient/4.8.1": {
"dependencies": {
"Microsoft.Win32.Registry": "4.7.0",
"System.Diagnostics.DiagnosticSource": "4.7.0",
"System.Security.Principal.Windows": "4.7.0",
"System.Text.Encoding.CodePages": "4.7.0",
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
},
"runtime": {
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"assemblyVersion": "4.6.1.1",
"fileVersion": "4.700.20.6702"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.6.1.1",
"fileVersion": "4.700.20.6702"
},
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.6.1.1",
"fileVersion": "4.700.20.6702"
}
}
},
"System.Diagnostics.Debug/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Diagnostics.DiagnosticSource/4.7.0": {
"runtime": {
"lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": {
"assemblyVersion": "4.0.5.0",
"fileVersion": "4.700.19.56404"
}
}
},
"System.Diagnostics.Tools/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Diagnostics.Tracing/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Drawing.Common/4.5.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.Win32.SystemEvents": "4.5.0"
},
"runtime": {
"lib/netstandard2.0/System.Drawing.Common.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.0/System.Drawing.Common.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
},
"runtimes/win/lib/netcoreapp2.0/System.Drawing.Common.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
}
},
"System.Globalization/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization.Calendars/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Globalization": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0"
}
},
"System.IO/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.Compression/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Buffers": "4.3.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.IO.Compression": "4.3.0"
}
},
"System.IO.Compression.ZipFile/4.3.0": {
"dependencies": {
"System.Buffers": "4.3.0",
"System.IO": "4.3.0",
"System.IO.Compression": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.IO.FileSystem/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem.Primitives/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Linq/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
}
},
"System.Linq.Expressions/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Linq": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Emit.Lightweight": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Net.Http/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.DiagnosticSource": "4.7.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Extensions": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.OpenSsl": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Security.Cryptography.X509Certificates": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.Net.Http": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Net.Primitives/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Net.Sockets/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.ObjectModel/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Reflection/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit/4.3.0": {
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit.ILGeneration/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit.Lightweight/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Primitives/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.TypeExtensions/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Resources.ResourceManager/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Globalization": "4.3.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"System.Runtime.CompilerServices.Unsafe/4.7.0": {
"runtime": {
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": {
"assemblyVersion": "4.0.6.0",
"fileVersion": "4.700.19.56404"
}
}
},
"System.Runtime.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.Handles/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.InteropServices/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Runtime.InteropServices.RuntimeInformation/4.3.0": {
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Threading": "4.3.0",
"runtime.native.System": "4.3.0"
}
},
"System.Runtime.Numerics/4.3.0": {
"dependencies": {
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
}
},
"System.Security.AccessControl/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Security.Principal.Windows": "4.7.0"
},
"runtime": {
"lib/netstandard2.0/System.Security.AccessControl.dll": {
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
}
},
"System.Security.Cryptography.Algorithms/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Collections": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.Apple": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Cng/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Security.Cryptography.Csp/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Security.Cryptography.Encoding/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Linq": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.OpenSsl/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Primitives/4.3.0": {
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Security.Cryptography.ProtectedData/4.5.0": {
"runtime": {
"lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": {
"assemblyVersion": "4.0.3.0",
"fileVersion": "4.6.26515.6"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.0.3.0",
"fileVersion": "4.6.26515.6"
}
}
},
"System.Security.Cryptography.X509Certificates/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Calendars": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Cng": "4.3.0",
"System.Security.Cryptography.Csp": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.OpenSsl": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.Net.Http": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Permissions/4.5.0": {
"dependencies": {
"System.Security.AccessControl": "4.7.0"
},
"runtime": {
"lib/netstandard2.0/System.Security.Permissions.dll": {
"assemblyVersion": "4.0.1.0",
"fileVersion": "4.6.26515.6"
}
}
},
"System.Security.Principal.Windows/4.7.0": {
"runtime": {
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
},
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
}
},
"System.Text.Encoding/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Text.Encoding.CodePages/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Runtime.CompilerServices.Unsafe": "4.7.0"
},
"runtime": {
"lib/netstandard2.0/System.Text.Encoding.CodePages.dll": {
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Text.Encoding.CodePages.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.1.3.0",
"fileVersion": "4.700.19.56404"
}
}
},
"System.Text.Encoding.Extensions/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Text.RegularExpressions/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Threading/4.3.0": {
"dependencies": {
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Threading.Tasks/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Threading.Tasks.Extensions/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Threading.Timer/4.3.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Xml.ReaderWriter/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Tasks.Extensions": "4.3.0"
}
},
"System.Xml.XDocument/4.3.0": {
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tools": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0"
}
},
"System.Windows.Forms/4.0.0.0": {
"runtime": {
"System.Windows.Forms.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.1055.0"
}
}
},
"Accessibility/4.0.0.0": {
"runtime": {
"Accessibility.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.1055.0"
}
}
},
"System.Deployment/4.0.0.0": {
"runtime": {
"System.Deployment.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.1055.0"
}
}
},
"System.Runtime.Serialization.Formatters.Soap/4.0.0.0": {
"runtime": {
"System.Runtime.Serialization.Formatters.Soap.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.1055.0"
}
}
}
}
},
"libraries": {
"FunnyPick/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"HtmlAgilityPack/1.11.24": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DLcytINO8EfCdBgMGsaz8Tvdgu2Aewoo2XX7WfZuRG9cBQRtbm8JZ4/sMRtFvzehjdIDqubdlQb8TqNfjRMEWg==",
"path": "htmlagilitypack/1.11.24",
"hashPath": "htmlagilitypack.1.11.24.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/3.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
"path": "microsoft.netcore.platforms/3.1.0",
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
},
"Microsoft.NETCore.Targets/1.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
"path": "microsoft.netcore.targets/1.1.0",
"hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
},
"Microsoft.Win32.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
"path": "microsoft.win32.primitives/4.3.0",
"hashPath": "microsoft.win32.primitives.4.3.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/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LuI1oG+24TUj1ZRQQjM5Ew73BKnZE5NZ/7eAdh1o8ST5dPhUnJvIkiIn2re3MwnkRy6ELRnvEbBxHP8uALKhJw==",
"path": "microsoft.win32.systemevents/4.5.0",
"hashPath": "microsoft.win32.systemevents.4.5.0.nupkg.sha512"
},
"NETStandard.Library/1.6.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
"path": "netstandard.library/1.6.1",
"hashPath": "netstandard.library.1.6.1.nupkg.sha512"
},
"NPOI/2.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2RkrIi+h6hDcrdR8EIxMpBb7vSz5Lgsr1HKgrA7Q+9/zQ17ky5b+3eHuJeuautFhRSrUTRxUfOpF5l9Vooy8/A==",
"path": "npoi/2.5.1",
"hashPath": "npoi.2.5.1.nupkg.sha512"
},
"Portable.BouncyCastle/1.8.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-y+GvZomzhY+Lwu5mMeNmFFYLHiEr2xFDOANhABn/wgg64/QpTzfgpNGPct+pXgQHjmutd363ZCur/91DLaBxOw==",
"path": "portable.bouncycastle/1.8.6",
"hashPath": "portable.bouncycastle.1.8.6.nupkg.sha512"
},
"RtfPipe/1.0.7388.1242": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oAhPNl64C3GgykYkwatAY2xwmXbwnFD9W9vy2T8M54zc3xOnz6B1wAV7h+6VHwIqUHmCAhk++UzeQidqoF64UQ==",
"path": "rtfpipe/1.0.7388.1242",
"hashPath": "rtfpipe.1.0.7388.1242.nupkg.sha512"
},
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==",
"path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==",
"path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==",
"path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.native.System/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
"path": "runtime.native.system/4.3.0",
"hashPath": "runtime.native.system.4.3.0.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.native.System.IO.Compression/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
"path": "runtime.native.system.io.compression/4.3.0",
"hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512"
},
"runtime.native.System.Net.Http/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
"path": "runtime.native.system.net.http/4.3.0",
"hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512"
},
"runtime.native.System.Security.Cryptography.Apple/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
"path": "runtime.native.system.security.cryptography.apple/4.3.0",
"hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
},
"runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
"path": "runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==",
"path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==",
"path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==",
"path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0",
"hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==",
"path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==",
"path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==",
"path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==",
"path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==",
"path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.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.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-zvWa/L02JHNatdtjya6Swpudb2YEHaOLHL1eRrqpjm71iGRNUNONO5adUF/9CHbSJbzhELW1UoH4NGy7n7+3bQ==",
"path": "sharpziplib/1.2.0",
"hashPath": "sharpziplib.1.2.0.nupkg.sha512"
},
"System.AppContext/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
"path": "system.appcontext/4.3.0",
"hashPath": "system.appcontext.4.3.0.nupkg.sha512"
},
"System.Buffers/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
"path": "system.buffers/4.3.0",
"hashPath": "system.buffers.4.3.0.nupkg.sha512"
},
"System.Collections/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
"path": "system.collections/4.3.0",
"hashPath": "system.collections.4.3.0.nupkg.sha512"
},
"System.Collections.Concurrent/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
"path": "system.collections.concurrent/4.3.0",
"hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512"
},
"System.Configuration.ConfigurationManager/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-UIFvaFfuKhLr9u5tWMxmVoDPkFeD+Qv8gUuap4aZgVGYSYMdERck4OhLN/2gulAc0nYTEigWXSJNNWshrmxnng==",
"path": "system.configuration.configurationmanager/4.5.0",
"hashPath": "system.configuration.configurationmanager.4.5.0.nupkg.sha512"
},
"System.Console/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
"path": "system.console/4.3.0",
"hashPath": "system.console.4.3.0.nupkg.sha512"
},
"System.Data.SqlClient/4.8.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HKLykcv6eZLbLnSMnlQ6Os4+UAmFE+AgYm92CTvJYeTOBtOYusX3qu8OoGhFrnKZax91UcLcDo5vPrqvJUTSNQ==",
"path": "system.data.sqlclient/4.8.1",
"hashPath": "system.data.sqlclient.4.8.1.nupkg.sha512"
},
"System.Diagnostics.Debug/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
"path": "system.diagnostics.debug/4.3.0",
"hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
},
"System.Diagnostics.DiagnosticSource/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oJjw3uFuVDJiJNbCD8HB4a2p3NYLdt1fiT5OGsPLw+WTOuG0KpP4OXelMmmVKpClueMsit6xOlzy4wNKQFiBLg==",
"path": "system.diagnostics.diagnosticsource/4.7.0",
"hashPath": "system.diagnostics.diagnosticsource.4.7.0.nupkg.sha512"
},
"System.Diagnostics.Tools/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
"path": "system.diagnostics.tools/4.3.0",
"hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512"
},
"System.Diagnostics.Tracing/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
"path": "system.diagnostics.tracing/4.3.0",
"hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512"
},
"System.Drawing.Common/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-AiJFxxVPdeITstiRS5aAu8+8Dpf5NawTMoapZ53Gfirml24p7HIfhjmCRxdXnmmf3IUA3AX3CcW7G73CjWxW/Q==",
"path": "system.drawing.common/4.5.0",
"hashPath": "system.drawing.common.4.5.0.nupkg.sha512"
},
"System.Globalization/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
"path": "system.globalization/4.3.0",
"hashPath": "system.globalization.4.3.0.nupkg.sha512"
},
"System.Globalization.Calendars/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
"path": "system.globalization.calendars/4.3.0",
"hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512"
},
"System.Globalization.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
"path": "system.globalization.extensions/4.3.0",
"hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512"
},
"System.IO/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
"path": "system.io/4.3.0",
"hashPath": "system.io.4.3.0.nupkg.sha512"
},
"System.IO.Compression/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
"path": "system.io.compression/4.3.0",
"hashPath": "system.io.compression.4.3.0.nupkg.sha512"
},
"System.IO.Compression.ZipFile/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
"path": "system.io.compression.zipfile/4.3.0",
"hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512"
},
"System.IO.FileSystem/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
"path": "system.io.filesystem/4.3.0",
"hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
},
"System.IO.FileSystem.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
"path": "system.io.filesystem.primitives/4.3.0",
"hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
},
"System.Linq/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
"path": "system.linq/4.3.0",
"hashPath": "system.linq.4.3.0.nupkg.sha512"
},
"System.Linq.Expressions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
"path": "system.linq.expressions/4.3.0",
"hashPath": "system.linq.expressions.4.3.0.nupkg.sha512"
},
"System.Net.Http/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
"path": "system.net.http/4.3.0",
"hashPath": "system.net.http.4.3.0.nupkg.sha512"
},
"System.Net.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
"path": "system.net.primitives/4.3.0",
"hashPath": "system.net.primitives.4.3.0.nupkg.sha512"
},
"System.Net.Sockets/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
"path": "system.net.sockets/4.3.0",
"hashPath": "system.net.sockets.4.3.0.nupkg.sha512"
},
"System.ObjectModel/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
"path": "system.objectmodel/4.3.0",
"hashPath": "system.objectmodel.4.3.0.nupkg.sha512"
},
"System.Reflection/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
"path": "system.reflection/4.3.0",
"hashPath": "system.reflection.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
"path": "system.reflection.emit/4.3.0",
"hashPath": "system.reflection.emit.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit.ILGeneration/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
"path": "system.reflection.emit.ilgeneration/4.3.0",
"hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
},
"System.Reflection.Emit.Lightweight/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
"path": "system.reflection.emit.lightweight/4.3.0",
"hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512"
},
"System.Reflection.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
"path": "system.reflection.extensions/4.3.0",
"hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512"
},
"System.Reflection.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
"path": "system.reflection.primitives/4.3.0",
"hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
},
"System.Reflection.TypeExtensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
"path": "system.reflection.typeextensions/4.3.0",
"hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512"
},
"System.Resources.ResourceManager/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
"path": "system.resources.resourcemanager/4.3.0",
"hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
},
"System.Runtime/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"path": "system.runtime/4.3.0",
"hashPath": "system.runtime.4.3.0.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-IpU1lcHz8/09yDr9N+Juc7SCgNUz+RohkCQI+KsWKR67XxpFr8Z6c8t1iENCXZuRuNCc4HBwme/MDHNVCwyAKg==",
"path": "system.runtime.compilerservices.unsafe/4.7.0",
"hashPath": "system.runtime.compilerservices.unsafe.4.7.0.nupkg.sha512"
},
"System.Runtime.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
"path": "system.runtime.extensions/4.3.0",
"hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
},
"System.Runtime.Handles/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
"path": "system.runtime.handles/4.3.0",
"hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
},
"System.Runtime.InteropServices/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
"path": "system.runtime.interopservices/4.3.0",
"hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
},
"System.Runtime.InteropServices.RuntimeInformation/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
"path": "system.runtime.interopservices.runtimeinformation/4.3.0",
"hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512"
},
"System.Runtime.Numerics/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
"path": "system.runtime.numerics/4.3.0",
"hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512"
},
"System.Security.AccessControl/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
"path": "system.security.accesscontrol/4.7.0",
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
},
"System.Security.Cryptography.Algorithms/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
"path": "system.security.cryptography.algorithms/4.3.0",
"hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Cng/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
"path": "system.security.cryptography.cng/4.3.0",
"hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Csp/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
"path": "system.security.cryptography.csp/4.3.0",
"hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Encoding/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
"path": "system.security.cryptography.encoding/4.3.0",
"hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
"path": "system.security.cryptography.openssl/4.3.0",
"hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.Primitives/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
"path": "system.security.cryptography.primitives/4.3.0",
"hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512"
},
"System.Security.Cryptography.ProtectedData/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==",
"path": "system.security.cryptography.protecteddata/4.5.0",
"hashPath": "system.security.cryptography.protecteddata.4.5.0.nupkg.sha512"
},
"System.Security.Cryptography.X509Certificates/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
"path": "system.security.cryptography.x509certificates/4.3.0",
"hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512"
},
"System.Security.Permissions/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9gdyuARhUR7H+p5CjyUB/zPk7/Xut3wUSP8NJQB6iZr8L3XUXTMdoLeVAg9N4rqF8oIpE7MpdqHdDHQ7XgJe0g==",
"path": "system.security.permissions/4.5.0",
"hashPath": "system.security.permissions.4.5.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/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
"path": "system.text.encoding/4.3.0",
"hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
},
"System.Text.Encoding.CodePages/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aeu4FlaUTemuT1qOd1MyU4T516QR4Fy+9yDbwWMPHOHy7U8FD6SgTzdZFO7gHcfAPHtECqInbwklVvUK4RHcNg==",
"path": "system.text.encoding.codepages/4.7.0",
"hashPath": "system.text.encoding.codepages.4.7.0.nupkg.sha512"
},
"System.Text.Encoding.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
"path": "system.text.encoding.extensions/4.3.0",
"hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512"
},
"System.Text.RegularExpressions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
"path": "system.text.regularexpressions/4.3.0",
"hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
},
"System.Threading/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
"path": "system.threading/4.3.0",
"hashPath": "system.threading.4.3.0.nupkg.sha512"
},
"System.Threading.Tasks/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
"path": "system.threading.tasks/4.3.0",
"hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
"path": "system.threading.tasks.extensions/4.3.0",
"hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512"
},
"System.Threading.Timer/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
"path": "system.threading.timer/4.3.0",
"hashPath": "system.threading.timer.4.3.0.nupkg.sha512"
},
"System.Xml.ReaderWriter/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
"path": "system.xml.readerwriter/4.3.0",
"hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512"
},
"System.Xml.XDocument/4.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
"path": "system.xml.xdocument/4.3.0",
"hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512"
},
"System.Windows.Forms/4.0.0.0": {
"type": "reference",
"serviceable": false,
"sha512": ""
},
"Accessibility/4.0.0.0": {
"type": "reference",
"serviceable": false,
"sha512": ""
},
"System.Deployment/4.0.0.0": {
"type": "reference",
"serviceable": false,
"sha512": ""
},
"System.Runtime.Serialization.Formatters.Soap/4.0.0.0": {
"type": "reference",
"serviceable": false,
"sha512": ""
}
}
}
\ No newline at end of file
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("FunnyPick")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("FunnyPick")]
[assembly: System.Reflection.AssemblyTitleAttribute("FunnyPick")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。
D:\source\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\FunnyPick.deps.json
D:\source\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\FunnyPick.dll
D:\source\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.csprojAssemblyReference.cache
D:\source\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.AssemblyInfoInputs.cache
D:\source\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.AssemblyInfo.cs
D:\source\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\FunnyPick.pdb
D:\source\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.dll
D:\source\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.pdb
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\FunnyPick.deps.json
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\FunnyPick.dll
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\FunnyPick.pdb
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\System.Windows.Forms.dll
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\Accessibility.dll
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\System.Deployment.dll
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\System.Runtime.Serialization.Formatters.Soap.dll
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\System.Windows.Forms.xml
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\Accessibility.xml
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\System.Deployment.xml
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\bin\Debug\netcoreapp3.0\System.Runtime.Serialization.Formatters.Soap.xml
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.AssemblyInfoInputs.cache
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.AssemblyInfo.cs
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.csproj.CoreCompileInputs.cache
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.csproj.CopyComplete
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.dll
C:\GIT\Ftt_Common\FunnyPick\FunnyPick\obj\Debug\netcoreapp3.0\FunnyPick.pdb
{
"version": 1,
"dgSpecHash": "S9I8jcQArzoKCN0ac/Fcdq9v/0/D1uOj1JriWfzSuzQqiyVwbIvBtfQvztY9rDo5TzYsvpTzlp1/oqO99m3ipg==",
"success": true
}
\ No newline at end of file
{
"format": 1,
"restore": {
"C:\\GIT\\Ftt_Common\\FunnyPick\\FunnyPick\\FunnyPick.csproj": {}
},
"projects": {
"C:\\GIT\\Ftt_Common\\FunnyPick\\FunnyPick\\FunnyPick.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\GIT\\Ftt_Common\\FunnyPick\\FunnyPick\\FunnyPick.csproj",
"projectName": "FunnyPick",
"projectPath": "C:\\GIT\\Ftt_Common\\FunnyPick\\FunnyPick\\FunnyPick.csproj",
"packagesPath": "D:\\Program Files (x86)\\Nuget\\packages",
"outputPath": "C:\\GIT\\Ftt_Common\\FunnyPick\\FunnyPick\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
],
"configFilePaths": [
"C:\\Users\\Administrator\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"netcoreapp3.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"netcoreapp3.0": {
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"netcoreapp3.0": {
"dependencies": {
"HtmlAgilityPack": {
"target": "Package",
"version": "[1.11.24, )"
},
"NPOI": {
"target": "Package",
"version": "[2.5.1, )"
},
"RtfPipe": {
"target": "Package",
"version": "[1.0.7388.1242, )"
},
"System.Data.SqlClient": {
"target": "Package",
"version": "[4.8.1, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"downloadDependencies": [
{
"name": "Microsoft.AspNetCore.App.Ref",
"version": "[3.0.1, 3.0.1]"
},
{
"name": "Microsoft.NETCore.App.Ref",
"version": "[3.0.0, 3.0.0]"
},
{
"name": "Microsoft.WindowsDesktop.App.Ref",
"version": "[3.0.0, 3.0.0]"
}
],
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\3.1.401\\RuntimeIdentifierGraph.json"
}
}
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">D:\Program Files (x86)\Nuget\packages</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">D:\Program Files (x86)\Nuget\packages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.7.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="$([MSBuild]::EnsureTrailingSlash($(NuGetPackageFolders)))" />
</ItemGroup>
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
</Project>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "{}" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment