Init project

This commit is contained in:
Lê Đăng Sơn - Ban CNTT 2025-09-30 09:22:49 +07:00
commit 86ff1e0fe9
91 changed files with 4900 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,223 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\Source\\Test-Jenkins\\QuizMaster\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|D:\\Source\\Test-Jenkins\\QuizMaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\test-jenkins\\quizmaster\\service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 134,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 10,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "QuestionOption.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\QuestionOption.cs",
"RelativeDocumentMoniker": "Response\\QuestionOption.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\QuestionOption.cs",
"RelativeToolTip": "Response\\QuestionOption.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-02T07:59:06.439Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "CategoryInfo.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\CategoryInfo.cs",
"RelativeDocumentMoniker": "Response\\CategoryInfo.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\CategoryInfo.cs",
"RelativeToolTip": "Response\\CategoryInfo.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T03:49:31.648Z"
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "Form1.Designer.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.Designer.cs",
"RelativeDocumentMoniker": "Form1.Designer.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.Designer.cs",
"RelativeToolTip": "Form1.Designer.cs",
"ViewState": "AgIAAG4AAAAAAAAAAAAuwHkAAAAUAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-30T01:51:59.493Z"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "Question.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Question.cs",
"RelativeDocumentMoniker": "Response\\Question.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Question.cs",
"RelativeToolTip": "Response\\Question.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAuwBAAAAAsAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-29T02:22:22.487Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "DataUtil.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\DataUtil.cs",
"RelativeDocumentMoniker": "Service\\DataUtil.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\DataUtil.cs",
"RelativeToolTip": "Service\\DataUtil.cs",
"ViewState": "AgIAABwAAAAAAAAAAAAQwC4AAAAiAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-29T01:45:12.308Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "ExcelValidator.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExcelValidator.cs",
"RelativeDocumentMoniker": "Service\\ExcelValidator.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExcelValidator.cs",
"RelativeToolTip": "Service\\ExcelValidator.cs",
"ViewState": "AgIAACIAAAAAAAAAAAAQwDwAAABYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T09:23:05.48Z"
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "Form1.cs [Design]",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs",
"RelativeDocumentMoniker": "Form1.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs [Design]",
"RelativeToolTip": "Form1.cs [Design]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T09:15:57.769Z",
"EditorCaption": " [Design]"
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "ExecuteExcelService.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExecuteExcelService.cs",
"RelativeDocumentMoniker": "Service\\ExecuteExcelService.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Service\\ExecuteExcelService.cs",
"RelativeToolTip": "Service\\ExecuteExcelService.cs",
"ViewState": "AgIAAAkAAAAAAAAAAAAAABIAAAAPAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T07:42:59.847Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Quiz.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Quiz.cs",
"RelativeDocumentMoniker": "Response\\Quiz.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Response\\Quiz.cs",
"RelativeToolTip": "Response\\Quiz.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T07:41:01.32Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Form1.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs",
"RelativeDocumentMoniker": "Form1.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Form1.cs",
"RelativeToolTip": "Form1.cs",
"ViewState": "AgIAACsBAAAAAAAAAAAswDkBAABGAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-26T01:54:54.164Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "DbHelper.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\DbHelper.cs",
"RelativeDocumentMoniker": "DbHelper.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\DbHelper.cs",
"RelativeToolTip": "DbHelper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAdAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-26T01:35:21.294Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "D:\\Source\\Test-Jenkins\\QuizMaster\\Program.cs",
"RelativeDocumentMoniker": "Program.cs",
"ToolTip": "D:\\Source\\Test-Jenkins\\QuizMaster\\Program.cs",
"RelativeToolTip": "Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAIAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-26T01:32:42.515Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View File

@ -0,0 +1,217 @@
{
"Version": 1,
"WorkspaceRootPath": "D:\\Source\\QuizMaster\\QuizMaster\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\quiz.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\questionoption.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\question.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\datautil.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:dbhelper.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:response\\categoryinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|D:\\Source\\QuizMaster\\QuizMaster\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:form1.designer.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\executeexcelservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|d:\\source\\quizmaster\\quizmaster\\service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{582DBFA6-720D-44B4-B48C-909F4DD98783}|QuizMaster.csproj|solutionrelative:service\\excelvalidator.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 134,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 10,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "QuestionOption.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\QuestionOption.cs",
"RelativeDocumentMoniker": "Response\\QuestionOption.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\QuestionOption.cs",
"RelativeToolTip": "Response\\QuestionOption.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-02T07:59:06.439Z"
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "CategoryInfo.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\CategoryInfo.cs",
"RelativeDocumentMoniker": "Response\\CategoryInfo.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\CategoryInfo.cs",
"RelativeToolTip": "Response\\CategoryInfo.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T03:49:31.648Z"
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "Form1.Designer.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.Designer.cs",
"RelativeDocumentMoniker": "Form1.Designer.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.Designer.cs",
"RelativeToolTip": "Form1.Designer.cs",
"ViewState": "AgIAAG4AAAAAAAAAAAAuwHkAAAAUAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-30T01:51:59.493Z"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "Question.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Question.cs",
"RelativeDocumentMoniker": "Response\\Question.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Question.cs",
"RelativeToolTip": "Response\\Question.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAuwBAAAAAsAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-29T02:22:22.487Z"
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "DataUtil.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\DataUtil.cs",
"RelativeDocumentMoniker": "Service\\DataUtil.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\DataUtil.cs",
"RelativeToolTip": "Service\\DataUtil.cs",
"ViewState": "AgIAABwAAAAAAAAAAAAQwC4AAAAiAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-29T01:45:12.308Z"
},
{
"$type": "Document",
"DocumentIndex": 11,
"Title": "ExcelValidator.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExcelValidator.cs",
"RelativeDocumentMoniker": "Service\\ExcelValidator.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExcelValidator.cs",
"RelativeToolTip": "Service\\ExcelValidator.cs",
"ViewState": "AgIAACIAAAAAAAAAAAAQwDwAAABYAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T09:23:05.48Z"
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "Form1.cs [Design]",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs",
"RelativeDocumentMoniker": "Form1.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs [Design]",
"RelativeToolTip": "Form1.cs [Design]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T09:15:57.769Z",
"EditorCaption": " [Design]"
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "ExecuteExcelService.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExecuteExcelService.cs",
"RelativeDocumentMoniker": "Service\\ExecuteExcelService.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Service\\ExecuteExcelService.cs",
"RelativeToolTip": "Service\\ExecuteExcelService.cs",
"ViewState": "AgIAAAkAAAAAAAAAAAAAABIAAAAPAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T07:42:59.847Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Quiz.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Quiz.cs",
"RelativeDocumentMoniker": "Response\\Quiz.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Response\\Quiz.cs",
"RelativeToolTip": "Response\\Quiz.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAuwA8AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-28T07:41:01.32Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Form1.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs",
"RelativeDocumentMoniker": "Form1.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Form1.cs",
"RelativeToolTip": "Form1.cs",
"ViewState": "AgIAACsBAAAAAAAAAAAswD0BAAA2AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-26T01:54:54.164Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "DbHelper.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\DbHelper.cs",
"RelativeDocumentMoniker": "DbHelper.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\DbHelper.cs",
"RelativeToolTip": "DbHelper.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAdAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-26T01:35:21.294Z"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "D:\\Source\\QuizMaster\\QuizMaster\\Program.cs",
"RelativeDocumentMoniker": "Program.cs",
"ToolTip": "D:\\Source\\QuizMaster\\QuizMaster\\Program.cs",
"RelativeToolTip": "Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAIAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-05-26T01:32:42.515Z"
}
]
}
]
}
]
}

77
QuizMaster/DbHelper.cs Normal file
View File

@ -0,0 +1,77 @@
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using System.Runtime.Serialization;
using Npgsql;
using QuizMaster.Response;
using System.Windows.Forms;
namespace QuizMaster
{
public static class DbHelper
{
public static string connectionString = "Host=192.168.10.140;Port=5432;Database=BSH_Quiz;Username=postgres;Password=0SIs7c6EYPsFNwq;Timeout=30;CommandTimeout=30;";
public static async Task<bool> TestConnection()
{
try
{
await using var conn = new NpgsqlConnection(connectionString);
await conn.OpenAsync();
return true;
}
catch (Exception ex)
{
MessageBox.Show($"Lỗi kết nối database: {ex.Message}", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
public static async Task<List<T>> ExecuteSelectQuery<T>(string query) where T : new()
{
DataTable table = new DataTable();
using (var conn = new NpgsqlConnection(connectionString))
{
await conn.OpenAsync();
using (var cmd = new NpgsqlCommand(query, conn))
using (var reader = await cmd.ExecuteReaderAsync())
{
table.Load(reader);
}
}
List<T> list = new List<T>();
foreach (DataRow row in table.Rows)
{
T obj = new T();
foreach (PropertyInfo prop in typeof(T).GetProperties())
{
if (!prop.CanWrite)
continue;
string columnName = prop.Name;
var dataMember = prop.GetCustomAttribute<DataMemberAttribute>();
if (dataMember != null && !string.IsNullOrEmpty(dataMember.Name))
{
columnName = dataMember.Name;
}
if (table.Columns.Contains(columnName) && row[columnName] != DBNull.Value)
{
Type targetType = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
object safeValue = Convert.ChangeType(row[columnName], targetType);
prop.SetValue(obj, safeValue);
}
}
list.Add(obj);
}
return list;
}
}
}

148
QuizMaster/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,148 @@
namespace QuizMaster
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
tabControl1 = new TabControl();
tabPage1 = new TabPage();
textBox1 = new TextBox();
BtnOpen = new Button();
label2 = new Label();
button1 = new Button();
label1 = new Label();
tabPage2 = new TabPage();
tabControl1.SuspendLayout();
tabPage1.SuspendLayout();
SuspendLayout();
//
// tabControl1
//
tabControl1.Controls.Add(tabPage1);
tabControl1.Controls.Add(tabPage2);
tabControl1.Location = new Point(12, 12);
tabControl1.Name = "tabControl1";
tabControl1.SelectedIndex = 0;
tabControl1.Size = new Size(1499, 955);
tabControl1.TabIndex = 0;
//
// tabPage1
//
tabPage1.Controls.Add(textBox1);
tabPage1.Controls.Add(BtnOpen);
tabPage1.Controls.Add(label2);
tabPage1.Controls.Add(button1);
tabPage1.Controls.Add(label1);
tabPage1.Location = new Point(4, 34);
tabPage1.Name = "tabPage1";
tabPage1.Padding = new Padding(3);
tabPage1.Size = new Size(1491, 917);
tabPage1.TabIndex = 0;
tabPage1.Text = "Tải lên bộ câu hỏi";
tabPage1.UseVisualStyleBackColor = true;
//
// textBox1
//
textBox1.Location = new Point(195, 84);
textBox1.Name = "textBox1";
textBox1.Size = new Size(273, 31);
textBox1.TabIndex = 7;
//
// BtnOpen
//
BtnOpen.Location = new Point(469, 83);
BtnOpen.Name = "BtnOpen";
BtnOpen.Size = new Size(92, 34);
BtnOpen.TabIndex = 6;
BtnOpen.Text = "open";
BtnOpen.UseVisualStyleBackColor = true;
BtnOpen.Click += btnOpen_Click;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(28, 92);
label2.Name = "label2";
label2.Size = new Size(159, 25);
label2.TabIndex = 5;
label2.Text = "Upload bộ câu hỏi";
//
// button1
//
button1.Location = new Point(195, 20);
button1.Name = "button1";
button1.Size = new Size(112, 34);
button1.TabIndex = 4;
button1.Text = "Download";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(28, 25);
label1.Name = "label1";
label1.Size = new Size(125, 25);
label1.TabIndex = 3;
label1.Text = "Tải về file mẫu";
//
// tabPage2
//
tabPage2.Location = new Point(4, 34);
tabPage2.Name = "tabPage2";
tabPage2.Padding = new Padding(3);
tabPage2.Size = new Size(1491, 917);
tabPage2.TabIndex = 1;
tabPage2.Text = "Tạo bộ câu hỏi ngẫu nhiên";
//
// Form1
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1515, 971);
Controls.Add(tabControl1);
Name = "Form1";
Text = "Form1";
Load += Form1_Load;
tabControl1.ResumeLayout(false);
tabPage1.ResumeLayout(false);
tabPage1.PerformLayout();
ResumeLayout(false);
}
#endregion
private TabControl tabControl1;
private TabPage tabPage1;
private TabPage tabPage2;
private Label label2;
private Button button1;
private Label label1;
private TextBox textBox1;
private Button BtnOpen;
}
}

393
QuizMaster/Form1.cs Normal file
View File

@ -0,0 +1,393 @@
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Diagnostics;
using System.Drawing.Printing;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using OfficeOpenXml;
using QuizMaster.Response;
using QuizMaster.Service;
using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.AxHost;
namespace QuizMaster
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static string defaultCombobox = "Chọn lĩnh vực";
private List<string> categorys = new List<string>();
private List<string> lstDep = new List<string>
{
"Ban CNTT",
"Ban XCG",
"Ban TCHC",
"Ban PTĐT"
};
private static string dfDep = "Chọn phòng ban";
private bool isUpdating = false;
List<Button> buttons = new List<Button>();
private List<ComboBox> comboBoxes = new List<ComboBox>();
private List<TextBox> textBoxes = new List<TextBox>();
public static int startY = 27; // Vị trí Y bắt đầu
public static int spacing = 40; // Khoảng cách giữa các ComboBox
public static int pointX = 19;
private void button1_Click(object sender, EventArgs e)
{
}
private async void Form1_Load(object sender, EventArgs e)
{
List<string> deps = new List<string>() { dfDep };
deps.AddRange(lstDep);
ComboBox comboMain = new ComboBox();
comboMain.Location = new Point(pointX, startY);
comboMain.Size = new Size(182, 33);
comboMain.Name = $"comboMain";
comboMain.DataSource = deps;
comboMain.SelectedIndexChanged += comboBoxMain_SelectedIndexChanged;
comboMain.DropDownStyle = ComboBoxStyle.DropDownList;
tabPage2.Controls.Add(comboMain);
try
{
categorys = await DataUtil.GetCategoriesAsync();
}
catch (Exception ex)
{
MessageBox.Show($"Lỗi khi tải danh sách lĩnh vực: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
categorys = new List<string>(); // Khởi tạo list rỗng nếu có lỗi
}
}
private void ComboBox_SelectedIndexChanged(object? sender, EventArgs e)
{
if (isUpdating || sender == null) return; // Đang cập nhật hoặc sender là null, bỏ qua
isUpdating = true; // Bắt đầu cập nhật
var cbbChange = sender as ComboBox;
if (cbbChange == null)
{
isUpdating = false;
return;
}
// Lấy các giá trị đã được chọn, bỏ qua "-- Chọn --"
var daChon = comboBoxes
.Where(cb => cb != null && cb.SelectedIndex > 0 && cb.SelectedItem != null)
.Select(cb => cb.SelectedItem.ToString())
.Where(s => s != null)
.ToList();
foreach (var cb in comboBoxes.Where(cb => cb != null))
{
if (cb == cbbChange) continue; // KHÔNG cập nhật lại ComboBox đang thay đổi
var oldSelected = cb.SelectedItem?.ToString();
var danhSachMoi = categorys
.Where(x => !daChon.Contains(x) || x == oldSelected)
.Prepend(defaultCombobox)
.ToList();
cb.DataSource = null; // Tránh sự kiện SelectedIndexChanged bị gọi lại giữa chừng
cb.DataSource = danhSachMoi;
int index = danhSachMoi.IndexOf(oldSelected ?? "");
cb.SelectedIndex = index >= 0 ? index : 0;
}
// Ẩn combobox thừa
int soLuongDaChon = daChon.Count;
for (int i = 0; i < comboBoxes.Count; i++)
{
if (comboBoxes[i] != null)
{
// Chỉ hiện tối đa số lượng mục gốc
comboBoxes[i].Visible = i < categorys.Count;
}
}
// ======= THÊM PHẦN HIỂN THỊ TEXTBOX TƯƠNG ỨNG =======
int indexCombo = comboBoxes.IndexOf(cbbChange);
string selectedText = cbbChange.SelectedItem?.ToString() ?? "";
//string txtBoxName = $"txtBox_{indexCombo}";
string txtBoxName = selectedText;
// Nếu chọn khác "-- Chọn --" thì hiển thị TextBox
if (selectedText != defaultCombobox)
{
var existingTextBox = tabPage2.Controls.Find(txtBoxName, true).FirstOrDefault();
if (existingTextBox == null)
{
TextBox txt = new TextBox();
txt.Name = txtBoxName;
txt.Size = new Size(300, 34);
txt.Location = new Point(cbbChange.Right + 10, cbbChange.Top);
txt.PlaceholderText = $"Nhập số câu hỏi về {selectedText}";
txt.TextAlign = HorizontalAlignment.Right;
txt.KeyPress += OnlyAllowPositiveIntegers;
tabPage2.Controls.Add(txt);
txt.BringToFront();
textBoxes.Add(txt);
}
else
{
((TextBox)existingTextBox).PlaceholderText = $"Nhập số câu hỏi về {selectedText}";
}
}
else
{
// Nếu chọn lại "-- Chọn --", thì xóa TextBox tương ứng nếu có
var toRemove = tabPage2.Controls.Find(txtBoxName, true).FirstOrDefault();
if (toRemove != null)
{
tabPage2.Controls.Remove(toRemove);
toRemove.Dispose();
}
// Xóa khỏi danh sách textBoxes
var txtToRemove = textBoxes.FirstOrDefault(tb => tb.Name == txtBoxName);
if (txtToRemove != null)
{
textBoxes.Remove(txtToRemove);
}
}
// ==============================================
isUpdating = false; // Kết thúc cập nhật
}
private void comboBoxMain_SelectedIndexChanged(object? sender, EventArgs e)
{
ComboBox? comboBoxMain = sender as ComboBox;
string? selected = comboBoxMain?.SelectedItem?.ToString();
if (selected == null || selected == dfDep)
{
// Xóa các ComboBox đã thêm trước đó khỏi giao diện
foreach (var cb in comboBoxes)
{
tabPage2.Controls.Remove(cb);
cb.Dispose();
}
// Xóa các ComboBox đã thêm trước đó khỏi giao diện
foreach (var btn in buttons)
{
tabPage2.Controls.Remove(btn);
btn.Dispose();
}
// Xóa các ComboBox đã thêm trước đó khỏi giao diện
foreach (var txt in textBoxes)
{
tabPage2.Controls.Remove(txt);
txt.Dispose();
}
buttons.Clear();
textBoxes.Clear();
comboBoxes.Clear(); // Xóa khỏi danh sách quản lý
return;
}
List<string> initCombobox = new List<string> { defaultCombobox };
initCombobox.AddRange(categorys);
// Tạo các ComboBox mới dựa trên số lượng phần tử trong lstCategory
for (int i = 0; i < categorys.Count; i++)
{
ComboBox cb = new ComboBox();
cb.Location = new Point(pointX, startY + spacing + (i * spacing));
cb.Size = new Size(182, 33);
cb.Name = $"comboBox{i + 1}";
cb.TabIndex = i;
cb.FormattingEnabled = true;
cb.DropDownStyle = ComboBoxStyle.DropDownList;
cb.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
// Gán danh sách ban đầu
cb.DataSource = new List<string>(initCombobox);
// Thêm vào tabPage2 và danh sách quản lý
tabPage2.Controls.Add(cb);
comboBoxes.Add(cb);
}
if (comboBoxes.Count > 0)
{
int lastCbb = comboBoxes.Last().Location.Y;
int heightCbb = comboBoxes.Last().Height;
int rightCbb = comboBoxes.Last().Right;
Button btGenerate = new Button();
btGenerate.Location = new Point(rightCbb, lastCbb + heightCbb + 20);
btGenerate.Size = new Size(182, 33);
btGenerate.Text = "Generate";
btGenerate.Click += btnGenClick;
buttons.Add(btGenerate);
tabPage2.Controls.Add(btGenerate);
}
}
private void OnlyAllowPositiveIntegers(object? sender, KeyPressEventArgs e)
{
// Cho phép phím số và phím điều hướng (Backspace)
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true; // Chặn ký tự không hợp lệ
}
}
private async void btnGenClick(object? sender, EventArgs e)
{
// validate không được bỏ trống ô textbox
Dictionary<string, string> lstCategory = new Dictionary<string, string>();
foreach (var txt in textBoxes)
{
if (string.IsNullOrWhiteSpace(txt.Text))
{
txt.Focus();
await FlashControl(txt);
return;
}
lstCategory.Add(txt.Name, txt.Text);
}
// validate số câu hỏi cần gen phải nhỏ hơn số câu có trong DB
var totalCategory = await DataUtil.GetTotalCategoriesAsync(lstCategory.Keys.ToList());
var aaa = await DataUtil.getAllQA("SQL");
// Get all câu hỏi và câu trả lời
var grouped = aaa
.GroupBy(q => new { q.QuestionId, q.Question })
.Select(group => new
{
QuestionId = group.Key.QuestionId,
Question = group.Key.Question,
Options = group.Select(o => new
{
Text = o.Option,
IsCorrect = o.IsCorrect == 1
}).ToList()
})
.ToList();
// Thực hiện generate ra bộ đề test
Console.WriteLine("a");
}
private HashSet<Control> flashingControls = new HashSet<Control>();
private async Task FlashControl(Control control)
{
if (flashingControls.Contains(control))
return; // Đã nhấp nháy => bỏ qua
flashingControls.Add(control);
var originalColor = control.BackColor;
for (int i = 0; i < 3; i++)
{
control.BackColor = Color.LightPink;
await Task.Delay(200);
control.BackColor = originalColor;
await Task.Delay(200);
}
flashingControls.Remove(control);
}
private async void btnOpen_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.InitialDirectory = "c:\\"; // hoặc thư mục mặc định bạn muốn
openFileDialog.Filter = "Excel Files (*.xlsx)|*.xlsx";
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
openFileDialog.CheckFileExists = true;
openFileDialog.CheckPathExists = true;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// Lấy đường dẫn file đã chọn
string filePath = openFileDialog.FileName;
List<string> errors = ExcelValidator.ValidateExcel(filePath);
// Đọc toàn bộ dữ liệu
List<Quiz> result = ExecuteExcelService.ReadExcelFile(filePath);
if (errors != null && errors.Count > 0)
{
// Hiển thị các lỗi nối thành chuỗi, mỗi lỗi trên một dòng
string errorMessage = string.Join(Environment.NewLine, errors);
DialogResult dialogResult = MessageBox.Show(
errorMessage + "\n\nBạn có muốn tiếp tục và bỏ qua các dòng bị lỗi không?",
"Lỗi validate file Excel",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (dialogResult == DialogResult.No)
{
return; // Dừng nếu người dùng chọn No
}
// Tách ra số dòng bị lỗi từ danh sách lỗi, ví dụ "Row 3:"
HashSet<int> errorRows = new HashSet<int>();
foreach (string error in errors)
{
Match match = Regex.Match(error, @"Dòng\s+(\d+)", RegexOptions.IgnoreCase);
if (match.Success && int.TryParse(match.Groups[1].Value, out int rowNumber))
{
errorRows.Add(rowNumber);
}
}
// Loại bỏ dòng bị lỗi (giả sử index = rowNumber - 2 do header ở dòng 1)
result = result
.Where((q, index) => !errorRows.Contains(index + 2)) // +2 nếu dòng header là dòng 1
.ToList();
}
// Get new list Quiz after check exits in database
List<Quiz> insertQuiz = new List<Quiz>();
foreach (Quiz quiz in result)
{
string compositeKey = $"{quiz.CauHoi}__{quiz.A}__{quiz.B}__{quiz.C}__{quiz.D}";
var existRecord = await DataUtil.QuestionAndAnswersExistAsync(quiz.CauHoi, compositeKey, DbHelper.connectionString);
if (!existRecord)
{
insertQuiz.Add(quiz);
}
}
if (insertQuiz.Count > 0)
{
bool success = await DataUtil.InsertQuestionAndAnswersAsync(insertQuiz);
if (success)
{
MessageBox.Show($"Đã thêm thành công {insertQuiz.Count} câu hỏi và đáp án vào database.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Không có câu hỏi mới nào cần thêm vào database.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
}
}

120
QuizMaster/Form1.resx Normal file
View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

20
QuizMaster/Program.cs Normal file
View File

@ -0,0 +1,20 @@
using OfficeOpenXml;
namespace QuizMaster
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
}

View File

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace QuizMaster.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuizMaster.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap folder {
get {
object obj = ResourceManager.GetObject("folder", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="folder" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="EPPlus" Version="7.0.8" />
<PackageReference Include="Npgsql" Version="9.0.3" />
<PackageReference Include="System.Data.SqlClient" Version="4.9.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Update="Form1.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>

25
QuizMaster/QuizMaster.sln Normal file
View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35931.197 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuizMaster", "QuizMaster.csproj", "{582DBFA6-720D-44B4-B48C-909F4DD98783}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{582DBFA6-720D-44B4-B48C-909F4DD98783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{582DBFA6-720D-44B4-B48C-909F4DD98783}.Debug|Any CPU.Build.0 = Debug|Any CPU
{582DBFA6-720D-44B4-B48C-909F4DD98783}.Release|Any CPU.ActiveCfg = Release|Any CPU
{582DBFA6-720D-44B4-B48C-909F4DD98783}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B63E2517-7189-410C-85C3-D4FDE0FF78E3}
EndGlobalSection
EndGlobal

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,8 @@
namespace QuizMaster.Response
{
internal class CategoryInfo
{
public string Category { get; set; } = "";
public int Total { get; set; }
}
}

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace QuizMaster.Response
{
[DataContract]
public class Question
{
[DataMember(Name = "id")]
public int Id { get; set; }
[DataMember(Name = "content")]
public string? Content { get; set; }
[DataMember(Name = "category")]
public string? Category { get; set; }
[DataMember(Name = "answercombo")]
public string? AnswerCombo { get; set; }
[DataMember(Name = "createdat")]
public DateTime? CreatedAt { get; set; }
}
}

View File

@ -0,0 +1,10 @@
namespace QuizMaster.Response
{
internal class QuestionOption
{
public int QuestionId { get; set; }
public string Question { get; set; }
public string Option { get; set; }
public int IsCorrect { get; set; } // 1 = đúng, 0 = sai
}
}

View File

@ -0,0 +1,15 @@
using System.Runtime.Serialization;
namespace QuizMaster.Response
{
public class Quiz
{
public required string LinhVuc { get; set; }
public required string CauHoi { get; set; }
public string? A { get; set; }
public string? B { get; set; }
public string? C { get; set; }
public string? D { get; set; }
public required string DapAn { get; set; }
}
}

View File

@ -0,0 +1,249 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using Npgsql;
using QuizMaster.Response;
namespace QuizMaster.Service
{
internal class DataUtil
{
public static async Task<bool> QuestionAndAnswersExistAsync(
string questionContent,
string answerContents,
string connectionString)
{
await using var conn = new NpgsqlConnection(connectionString);
await conn.OpenAsync();
// 1. Kiểm tra xem câu hỏi đã tồn tại chưa
var questionIdCmd = new NpgsqlCommand(@"
SELECT Id FROM Question WHERE Content = @content AND AnswerCombo = @answerCombo;
", conn);
questionIdCmd.Parameters.AddWithValue("content", questionContent);
questionIdCmd.Parameters.AddWithValue("answerCombo", answerContents);
var questionIdObj = await questionIdCmd.ExecuteScalarAsync();
if (questionIdObj == null)
return false;
return true;
}
public static async Task<List<string>> GetCategoriesAsync()
{
List<string> categories = new List<string>();
using var conn = new NpgsqlConnection(DbHelper.connectionString);
_ = conn.OpenAsync();
try
{
var cmd = new NpgsqlCommand(@"
SELECT DISTINCT Category
FROM Question
WHERE Category IS NOT NULL
ORDER BY Category;
", conn);
await using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
var category = reader.GetString(0);
if (!string.IsNullOrEmpty(category))
{
categories.Add(category);
}
}
}
catch (Exception ex)
{
MessageBox.Show($"Lỗi khi lấy danh sách category: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
throw;
}
return categories;
}
public static async Task<List<CategoryInfo>> GetTotalCategoriesAsync(List<string> lstCategory)
{
var categories = new List<CategoryInfo>();
if (lstCategory == null || lstCategory.Count == 0)
{
return categories;
}
string whereCate = string.Join(",", lstCategory.Select(c => $"'{c.Replace("'", "''")}'"));
await using var conn = new NpgsqlConnection(DbHelper.connectionString);
await conn.OpenAsync();
try
{
var cmd = new NpgsqlCommand(@"
SELECT category, COUNT(*) AS Total
FROM question
WHERE category IN (" + whereCate + ") GROUP BY category ;", conn);
await using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
categories.Add(new CategoryInfo
{
Category = reader.GetString(0),
Total = reader.GetInt32(1)
});
}
}
catch (Exception ex)
{
MessageBox.Show($"Lỗi khi lấy danh sách category: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
throw;
}
return categories;
}
public static async Task<List<QuestionOption>> getAllQA(string Category)
{
var questionOption = new List<QuestionOption>();
await using var conn = new NpgsqlConnection(DbHelper.connectionString);
await conn.OpenAsync();
try
{
var cmd = new NpgsqlCommand(@"
select q.id ,q.content, a.content,a.iscorrect from answer a inner join question q on a.questionid =q.id where q.category = '" + Category + "';", conn);
await using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
questionOption.Add(new QuestionOption
{
QuestionId = reader.IsDBNull(0) ? 0 : reader.GetInt32(0),
Question = reader.IsDBNull(1) ? string.Empty : reader.GetString(1),
Option = reader.IsDBNull(2) ? string.Empty : reader.GetString(2),
IsCorrect = reader.IsDBNull(3) ? 0 : reader.GetInt32(3)
});
}
}
catch (Exception ex)
{
MessageBox.Show($"Lỗi khi lấy danh sách category: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
throw;
}
return questionOption;
}
public static async Task<bool> InsertQuestionAndAnswersAsync(List<Quiz> questions)
{
await using var conn = new NpgsqlConnection(DbHelper.connectionString);
await conn.OpenAsync();
await using var transaction = await conn.BeginTransactionAsync();
try
{
// Dictionary để lưu mapping giữa compositeKey và questionId
var questionIdMap = new Dictionary<string, int>();
// Insert questions
foreach (var q in questions)
{
string compositeKey = $"{q.CauHoi}__{q.A}__{q.B}__{q.C}__{q.D}";
// Insert question
var cmdQuestion = new NpgsqlCommand(@"
INSERT INTO Question (Content, Category, AnswerCombo)
VALUES (@content, @category, @answerCombo)
RETURNING Id;
", conn, transaction);
cmdQuestion.Parameters.AddWithValue("content", q.CauHoi);
cmdQuestion.Parameters.AddWithValue("category", q.LinhVuc);
cmdQuestion.Parameters.AddWithValue("answerCombo", compositeKey);
var questionId = (int?)await cmdQuestion.ExecuteScalarAsync();
if (!questionId.HasValue)
{
throw new Exception($"Không thể insert câu hỏi: {q.CauHoi}");
}
questionIdMap[compositeKey] = questionId.Value;
// Insert answers
var answerOptions = new Dictionary<string, string?>
{
{ "A", q.A },
{ "B", q.B },
{ "C", q.C },
{ "D", q.D }
};
foreach (var opt in answerOptions)
{
var cmdAnswer = new NpgsqlCommand(@"
INSERT INTO Answer (QuestionId, Content, IsCorrect)
VALUES (@questionId, @content, @isCorrect);
", conn, transaction);
cmdAnswer.Parameters.AddWithValue("questionId", questionId.Value);
cmdAnswer.Parameters.AddWithValue("content", opt.Value ?? (object)DBNull.Value);
cmdAnswer.Parameters.AddWithValue("isCorrect", opt.Key == q.DapAn ? 1 : 0);
await cmdAnswer.ExecuteNonQueryAsync();
}
}
await transaction.CommitAsync();
return true;
}
catch (Exception ex)
{
await transaction.RollbackAsync();
MessageBox.Show($"Lỗi khi thêm câu hỏi và đáp án: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
public static async Task<int> GetTotalQuestionCount()
{
string query = "SELECT COUNT(*) FROM Question";
await using var conn = new NpgsqlConnection(DbHelper.connectionString);
await conn.OpenAsync();
await using var cmd = new NpgsqlCommand(query, conn);
var result = await cmd.ExecuteScalarAsync();
if (result == null || result == DBNull.Value)
{
return 0;
}
return Convert.ToInt32(result);
}
public static async Task<List<Question>> GetRandomQuestions(int requestedCount)
{
int totalCount = await GetTotalQuestionCount();
if (requestedCount <= 0)
{
MessageBox.Show("Vui lòng nhập số lượng lớn hơn 0.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return new List<Question>();
}
if (requestedCount > totalCount)
{
MessageBox.Show($"Chỉ có {totalCount} câu hỏi trong cơ sở dữ liệu.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return new List<Question>();
}
string query = $"SELECT * FROM Question ORDER BY RANDOM() LIMIT {requestedCount}";
return await DbHelper.ExecuteSelectQuery<Question>(query);
}
}
}

View File

@ -0,0 +1,96 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OfficeOpenXml;
namespace QuizMaster.Service
{
public static class ExcelValidator
{
private static readonly List<string> ExpectedHeaders = new()
{
"Lĩnh vực", "Câu hỏi", "A", "B", "C", "D", "Đáp án"
};
public static List<string> ValidateExcel(string filePath)
{
var errors = new List<string>();
var questionOptionDict = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
using var package = new ExcelPackage(new FileInfo(filePath));
var worksheet = package.Workbook.Worksheets[0]; // Sheet đầu tiên
// 1. Kiểm tra header
for (int i = 0; i < ExpectedHeaders.Count; i++)
{
string cellValue = worksheet.Cells[1, i + 1].Text.Trim();
if (cellValue != ExpectedHeaders[i])
{
errors.Add($"Cột {i + 1} phải là '{ExpectedHeaders[i]}', nhưng là '{cellValue}'");
}
}
// 2. Kiểm tra từng dòng dữ liệu
int row = 2;
while (true)
{
var firstCell = worksheet.Cells[row, 1];
if (string.IsNullOrWhiteSpace(firstCell.Text)) break; // Dòng trống → kết thúc
string field = worksheet.Cells[row, 1].Text.Trim();
string question = worksheet.Cells[row, 2].Text.Trim();
string ansA = worksheet.Cells[row, 3].Text.Trim();
string ansB = worksheet.Cells[row, 4].Text.Trim();
string ansC = worksheet.Cells[row, 5].Text.Trim();
string ansD = worksheet.Cells[row, 6].Text.Trim();
string answer = worksheet.Cells[row, 7].Text.Trim().ToUpper();
if (string.IsNullOrWhiteSpace(field))
errors.Add($"Dòng {row}: 'Lĩnh vực' không được trống");
if (string.IsNullOrWhiteSpace(question))
{
errors.Add($"Dòng {row}: 'Câu hỏi' không được trống");
}
else
{
string compositeKey = $"{question}__{ansA}__{ansB}__{ansC}__{ansD}";
if (questionOptionDict.TryGetValue(compositeKey, out int existingRow))
{
errors.Add($"Dòng {row}: Câu hỏi và các đáp án AD trùng với dòng {existingRow}");
}
else
{
questionOptionDict[compositeKey] = row;
}
}
// Phải có ít nhất 1 trong các phương án A-D
if (string.IsNullOrWhiteSpace(ansA) &&
string.IsNullOrWhiteSpace(ansB) &&
string.IsNullOrWhiteSpace(ansC) &&
string.IsNullOrWhiteSpace(ansD))
{
errors.Add($"Dòng {row}: Cần ít nhất 1 phương án A, B, C hoặc D");
}
if (string.IsNullOrWhiteSpace(answer))
{
errors.Add($"Dòng {row}: 'Đáp án' không được trống");
}
else if (!new[] { "A", "B", "C", "D" }.Contains(answer))
{
errors.Add($"Dòng {row}: 'Đáp án' phải là A, B, C hoặc D (hiện tại là '{answer}')");
}
row++;
}
return errors;
}
}
}

View File

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OfficeOpenXml;
using QuizMaster.Response;
namespace QuizMaster.Service
{
public static class ExecuteExcelService
{
public static List<Quiz> ReadExcelFile(string filePath)
{
var result = new List<Quiz>();
using (var package = new ExcelPackage(new FileInfo(filePath)))
{
var worksheet = package.Workbook.Worksheets[0]; // Sheet đầu tiên
int rowCount = worksheet.Dimension.Rows;
for (int row = 2; row <= rowCount; row++) // Bắt đầu từ dòng 2, bỏ dòng tiêu đề
{
var ch = new Quiz
{
LinhVuc = worksheet.Cells[row, 1].Text,
CauHoi = worksheet.Cells[row, 2].Text,
A = worksheet.Cells[row, 3].Text,
B = worksheet.Cells[row, 4].Text,
C = worksheet.Cells[row, 5].Text,
D = worksheet.Cells[row, 6].Text,
DapAn = worksheet.Cells[row, 7].Text
};
result.Add(ch);
}
}
return result;
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,533 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v7.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v7.0": {
"QuizMaster/1.0.0": {
"dependencies": {
"EPPlus": "7.0.8",
"Npgsql": "9.0.3",
"System.Data.SqlClient": "4.9.0"
},
"runtime": {
"QuizMaster.dll": {}
}
},
"EPPlus/7.0.8": {
"dependencies": {
"EPPlus.Interfaces": "6.1.1",
"EPPlus.System.Drawing": "6.1.1",
"Microsoft.Extensions.Configuration.Json": "7.0.0",
"Microsoft.IO.RecyclableMemoryStream": "3.0.0",
"System.ComponentModel.Annotations": "5.0.0",
"System.Security.Cryptography.Pkcs": "7.0.3",
"System.Text.Encoding.CodePages": "7.0.0"
},
"runtime": {
"lib/net7.0/EPPlus.dll": {
"assemblyVersion": "7.0.8.0",
"fileVersion": "7.0.8.0"
}
}
},
"EPPlus.Interfaces/6.1.1": {
"runtime": {
"lib/net7.0/EPPlus.Interfaces.dll": {
"assemblyVersion": "6.1.1.0",
"fileVersion": "6.1.1.0"
}
}
},
"EPPlus.System.Drawing/6.1.1": {
"dependencies": {
"EPPlus.Interfaces": "6.1.1",
"System.Drawing.Common": "7.0.0"
},
"runtime": {
"lib/net7.0/EPPlus.System.Drawing.dll": {
"assemblyVersion": "6.1.1.0",
"fileVersion": "6.1.1.0"
}
}
},
"Microsoft.Extensions.Configuration/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Physical": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"System.Text.Json": "8.0.5"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"runtime": {
"lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.1024.46610"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"runtime": {
"lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"System.Diagnostics.DiagnosticSource": "8.0.1"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.1024.46610"
}
}
},
"Microsoft.Extensions.Primitives/7.0.0": {
"runtime": {
"lib/net7.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.IO.RecyclableMemoryStream/3.0.0": {
"runtime": {
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"Microsoft.Win32.SystemEvents/7.0.0": {},
"Npgsql/9.0.3": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"System.Diagnostics.DiagnosticSource": "8.0.1",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Json": "8.0.5"
},
"runtime": {
"lib/net6.0/Npgsql.dll": {
"assemblyVersion": "9.0.3.0",
"fileVersion": "9.0.3.0"
}
}
},
"runtime.native.System.Data.SqlClient.sni/4.4.0": {
"dependencies": {
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
}
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-arm64/native/sni.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x64/native/sni.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x86/native/sni.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"System.ComponentModel.Annotations/5.0.0": {},
"System.Data.SqlClient/4.9.0": {
"dependencies": {
"runtime.native.System.Data.SqlClient.sni": "4.4.0"
},
"runtime": {
"lib/net6.0/System.Data.SqlClient.dll": {
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.900.24.56208"
}
},
"runtimeTargets": {
"runtimes/unix/lib/net6.0/System.Data.SqlClient.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.900.24.56208"
},
"runtimes/win/lib/net6.0/System.Data.SqlClient.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.900.24.56208"
}
}
},
"System.Diagnostics.DiagnosticSource/8.0.1": {
"runtime": {
"lib/net7.0/System.Diagnostics.DiagnosticSource.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.424.16909"
}
}
},
"System.Drawing.Common/7.0.0": {
"dependencies": {
"Microsoft.Win32.SystemEvents": "7.0.0"
}
},
"System.Formats.Asn1/7.0.0": {},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
"System.Security.Cryptography.Pkcs/7.0.3": {
"dependencies": {
"System.Formats.Asn1": "7.0.0"
},
"runtime": {
"lib/net7.0/System.Security.Cryptography.Pkcs.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.823.31807"
}
},
"runtimeTargets": {
"runtimes/win/lib/net7.0/System.Security.Cryptography.Pkcs.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.823.31807"
}
}
},
"System.Text.Encoding.CodePages/7.0.0": {},
"System.Text.Encodings.Web/8.0.0": {
"runtime": {
"lib/net7.0/System.Text.Encodings.Web.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.23.53103"
}
},
"runtimeTargets": {
"runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll": {
"rid": "browser",
"assetType": "runtime",
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.23.53103"
}
}
},
"System.Text.Json/8.0.5": {
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
},
"runtime": {
"lib/net7.0/System.Text.Json.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.1024.46610"
}
}
}
}
},
"libraries": {
"QuizMaster/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"EPPlus/7.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-q9shaL3LMVtfUHC7KtCWTn40cO5kjirfxkUo1Hloe2ZqZmP/3UFT70JBnIhTMTh1i/dZ8ynrkd9gxLuzqfriQQ==",
"path": "epplus/7.0.8",
"hashPath": "epplus.7.0.8.nupkg.sha512"
},
"EPPlus.Interfaces/6.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-y7dkrOoE1ZR9Vgy1Jf2rEIaTf3SHlUjYt01NklP+F5Qh7S2ruPbzTcpYLRWMeXiG8XL8h2jqX4CyIkFt3NQGZw==",
"path": "epplus.interfaces/6.1.1",
"hashPath": "epplus.interfaces.6.1.1.nupkg.sha512"
},
"EPPlus.System.Drawing/6.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lRF5gHYrmkHOOiLMI0t6q8zNYjUrzRgAM5BCXumv5xiqXko8fx3AWI+HCNZfhEqVFGOop+42KfR5GiUcCoyoMw==",
"path": "epplus.system.drawing/6.1.1",
"hashPath": "epplus.system.drawing.6.1.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
"path": "microsoft.extensions.configuration/7.0.0",
"hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
"path": "microsoft.extensions.configuration.fileextensions/7.0.0",
"hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
"path": "microsoft.extensions.configuration.json/7.0.0",
"hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
"path": "microsoft.extensions.fileproviders.abstractions/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
"path": "microsoft.extensions.fileproviders.physical/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==",
"path": "microsoft.extensions.filesystemglobbing/7.0.0",
"hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
"path": "microsoft.extensions.logging.abstractions/8.0.2",
"hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
"path": "microsoft.extensions.primitives/7.0.0",
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
},
"Microsoft.IO.RecyclableMemoryStream/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-irv0HuqoH8Ig5i2fO+8dmDNdFdsrO+DoQcedwIlb810qpZHBNQHZLW7C/AHBQDgLLpw2T96vmMAy/aE4Yj55Sg==",
"path": "microsoft.io.recyclablememorystream/3.0.0",
"hashPath": "microsoft.io.recyclablememorystream.3.0.0.nupkg.sha512"
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==",
"path": "microsoft.win32.systemevents/7.0.0",
"hashPath": "microsoft.win32.systemevents.7.0.0.nupkg.sha512"
},
"Npgsql/9.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==",
"path": "npgsql/9.0.3",
"hashPath": "npgsql.9.0.3.nupkg.sha512"
},
"runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-A8v6PGmk+UGbfWo5Ixup0lPM4swuSwOiayJExZwKIOjTlFFQIsu3QnDXECosBEyrWSPryxBVrdqtJyhK3BaupQ==",
"path": "runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.native.system.data.sqlclient.sni.4.4.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"
},
"System.ComponentModel.Annotations/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==",
"path": "system.componentmodel.annotations/5.0.0",
"hashPath": "system.componentmodel.annotations.5.0.0.nupkg.sha512"
},
"System.Data.SqlClient/4.9.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-j4KJO+vC62NyUtNHz854njEqXbT8OmAa5jb1nrGfYWBOcggyYUQE0w/snXeaCjdvkSKWuUD+hfvlbN8pTrJTXg==",
"path": "system.data.sqlclient/4.9.0",
"hashPath": "system.data.sqlclient.4.9.0.nupkg.sha512"
},
"System.Diagnostics.DiagnosticSource/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==",
"path": "system.diagnostics.diagnosticsource/8.0.1",
"hashPath": "system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512"
},
"System.Drawing.Common/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
"path": "system.drawing.common/7.0.0",
"hashPath": "system.drawing.common.7.0.0.nupkg.sha512"
},
"System.Formats.Asn1/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-+nfpV0afLmvJW8+pLlHxRjz3oZJw4fkyU9MMEaMhCsHi/SN9bGF9q79ROubDiwTiCHezmK0uCWkPP7tGFP/4yg==",
"path": "system.formats.asn1/7.0.0",
"hashPath": "system.formats.asn1.7.0.0.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"System.Security.Cryptography.Pkcs/7.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yhwEHH5Gzl/VoADrXtt5XC95OFoSjNSWLHNutE7GwdOgefZVRvEXRSooSpL8HHm3qmdd9epqzsWg28UJemt22w==",
"path": "system.security.cryptography.pkcs/7.0.3",
"hashPath": "system.security.cryptography.pkcs.7.0.3.nupkg.sha512"
},
"System.Text.Encoding.CodePages/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LSyCblMpvOe0N3E+8e0skHcrIhgV2huaNcjUUEa8hRtgEAm36aGkRoC8Jxlb6Ra6GSfF29ftduPNywin8XolzQ==",
"path": "system.text.encoding.codepages/7.0.0",
"hashPath": "system.text.encoding.codepages.7.0.0.nupkg.sha512"
},
"System.Text.Encodings.Web/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
"path": "system.text.encodings.web/8.0.0",
"hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512"
},
"System.Text.Json/8.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
"path": "system.text.json/8.0.5",
"hashPath": "system.text.json.8.0.5.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,18 @@
{
"runtimeOptions": {
"tfm": "net7.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "7.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "7.0.0"
}
],
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true
}
}
}

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]

View File

@ -0,0 +1,25 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("QuizMaster")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("QuizMaster")]
[assembly: System.Reflection.AssemblyTitleAttribute("QuizMaster")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
494fffa1eeb40e7e0419966a151483d3d31c2dba1ddb4309e45467716a0e9bf9

View File

@ -0,0 +1,22 @@
is_global = true
build_property.ApplicationManifest =
build_property.StartupObject =
build_property.ApplicationDefaultFont =
build_property.ApplicationHighDpiMode =
build_property.ApplicationUseCompatibleTextRendering =
build_property.ApplicationVisualStyles =
build_property.TargetFramework = net7.0-windows
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = QuizMaster
build_property.ProjectDir = D:\Source\QuizMaster\QuizMaster\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
build_property.EffectiveAnalysisLevelStyle = 7.0
build_property.EnableCodeStyleSeverity =

View File

@ -0,0 +1,10 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.Drawing;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;
global using global::System.Windows.Forms;

View File

@ -0,0 +1 @@
8712f44c8eee950bceab57adf5a77fda0756bc0f1b7366d94ebd5636f210a8d6

View File

@ -0,0 +1,46 @@
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\QuizMaster.exe
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\QuizMaster.deps.json
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\QuizMaster.runtimeconfig.json
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\QuizMaster.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\QuizMaster.pdb
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.Form1.resources
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.csproj.GenerateResource.cache
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.GeneratedMSBuildEditorConfig.editorconfig
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.AssemblyInfoInputs.cache
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.AssemblyInfo.cs
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.csproj.CoreCompileInputs.cache
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.dll
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\refint\QuizMaster.dll
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.pdb
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.genruntimeconfig.cache
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\ref\QuizMaster.dll
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.Properties.Resources.resources
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.DependencyInjection.Abstractions.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.Logging.Abstractions.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Npgsql.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\System.Data.SqlClient.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\System.Diagnostics.DiagnosticSource.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\System.Text.Encodings.Web.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\System.Text.Json.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\win-arm64\native\sni.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\win-x64\native\sni.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\win-x86\native\sni.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\unix\lib\net6.0\System.Data.SqlClient.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\win\lib\net6.0\System.Data.SqlClient.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\browser\lib\net7.0\System.Text.Encodings.Web.dll
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.csproj.AssemblyReference.cache
D:\Source\Test-Jenkins\QuizMaster\obj\Debug\net7.0-windows\QuizMaster.csproj.Up2Date
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\EPPlus.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\EPPlus.Interfaces.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\EPPlus.System.Drawing.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.Configuration.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.Configuration.Abstractions.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.Configuration.FileExtensions.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.Configuration.Json.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.FileProviders.Abstractions.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.FileProviders.Physical.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.FileSystemGlobbing.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.Extensions.Primitives.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\Microsoft.IO.RecyclableMemoryStream.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\System.Security.Cryptography.Pkcs.dll
D:\Source\Test-Jenkins\QuizMaster\bin\Debug\net7.0-windows\runtimes\win\lib\net7.0\System.Security.Cryptography.Pkcs.dll

View File

@ -0,0 +1,583 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v7.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v7.0": {
"EPPlus/7.0.8": {
"dependencies": {
"EPPlus.Interfaces": "6.1.1",
"EPPlus.System.Drawing": "6.1.1",
"Microsoft.Extensions.Configuration.Json": "7.0.0",
"Microsoft.IO.RecyclableMemoryStream": "3.0.0",
"System.ComponentModel.Annotations": "5.0.0",
"System.Security.Cryptography.Pkcs": "7.0.3",
"System.Text.Encoding.CodePages": "7.0.0"
},
"runtime": {
"lib/net7.0/EPPlus.dll": {
"assemblyVersion": "7.0.8.0",
"fileVersion": "7.0.8.0"
}
}
},
"EPPlus.Interfaces/6.1.1": {
"runtime": {
"lib/net7.0/EPPlus.Interfaces.dll": {
"assemblyVersion": "6.1.1.0",
"fileVersion": "6.1.1.0"
}
}
},
"EPPlus.System.Drawing/6.1.1": {
"dependencies": {
"EPPlus.Interfaces": "6.1.1",
"System.Drawing.Common": "7.0.0"
},
"runtime": {
"lib/net7.0/EPPlus.System.Drawing.dll": {
"assemblyVersion": "6.1.1.0",
"fileVersion": "6.1.1.0"
}
}
},
"Microsoft.Extensions.Configuration/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Physical": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"System.Text.Json": "8.0.5"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"runtime": {
"lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.1024.46610"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"runtime": {
"lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"System.Diagnostics.DiagnosticSource": "8.0.1"
},
"runtime": {
"lib/net7.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.1024.46610"
}
}
},
"Microsoft.Extensions.Primitives/7.0.0": {
"runtime": {
"lib/net7.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.IO.RecyclableMemoryStream/3.0.0": {
"runtime": {
"lib/net6.0/Microsoft.IO.RecyclableMemoryStream.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"runtime": {
"lib/net7.0/Microsoft.Win32.SystemEvents.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net7.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Npgsql/9.0.3": {
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
"System.Diagnostics.DiagnosticSource": "8.0.1",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Json": "8.0.5"
},
"runtime": {
"lib/net6.0/Npgsql.dll": {
"assemblyVersion": "9.0.3.0",
"fileVersion": "9.0.3.0"
}
}
},
"runtime.native.System.Data.SqlClient.sni/4.4.0": {
"dependencies": {
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
}
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-arm64/native/sni.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x64/native/sni.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x86/native/sni.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"System.ComponentModel.Annotations/5.0.0": {
"runtime": {
"lib/netstandard2.1/System.ComponentModel.Annotations.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.20.51904"
}
}
},
"System.Data.SqlClient/4.9.0": {
"dependencies": {
"runtime.native.System.Data.SqlClient.sni": "4.4.0"
},
"runtime": {
"lib/net6.0/System.Data.SqlClient.dll": {
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.900.24.56208"
}
},
"runtimeTargets": {
"runtimes/unix/lib/net6.0/System.Data.SqlClient.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.900.24.56208"
},
"runtimes/win/lib/net6.0/System.Data.SqlClient.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.900.24.56208"
}
}
},
"System.Diagnostics.DiagnosticSource/8.0.1": {
"runtime": {
"lib/net7.0/System.Diagnostics.DiagnosticSource.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.424.16909"
}
}
},
"System.Drawing.Common/7.0.0": {
"dependencies": {
"Microsoft.Win32.SystemEvents": "7.0.0"
},
"runtime": {
"lib/net7.0/System.Drawing.Common.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net7.0/System.Drawing.Common.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Formats.Asn1/7.0.0": {
"runtime": {
"lib/net7.0/System.Formats.Asn1.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"runtime": {
"lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"System.Security.Cryptography.Pkcs/7.0.3": {
"dependencies": {
"System.Formats.Asn1": "7.0.0"
},
"runtime": {
"lib/net7.0/System.Security.Cryptography.Pkcs.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.823.31807"
}
},
"runtimeTargets": {
"runtimes/win/lib/net7.0/System.Security.Cryptography.Pkcs.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.823.31807"
}
}
},
"System.Text.Encoding.CodePages/7.0.0": {
"runtime": {
"lib/net7.0/System.Text.Encoding.CodePages.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net7.0/System.Text.Encoding.CodePages.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Text.Encodings.Web/8.0.0": {
"runtime": {
"lib/net7.0/System.Text.Encodings.Web.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.23.53103"
}
},
"runtimeTargets": {
"runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll": {
"rid": "browser",
"assetType": "runtime",
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.23.53103"
}
}
},
"System.Text.Json/8.0.5": {
"dependencies": {
"System.Text.Encodings.Web": "8.0.0"
},
"runtime": {
"lib/net7.0/System.Text.Json.dll": {
"assemblyVersion": "8.0.0.0",
"fileVersion": "8.0.1024.46610"
}
}
}
}
},
"libraries": {
"EPPlus/7.0.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-q9shaL3LMVtfUHC7KtCWTn40cO5kjirfxkUo1Hloe2ZqZmP/3UFT70JBnIhTMTh1i/dZ8ynrkd9gxLuzqfriQQ==",
"path": "epplus/7.0.8",
"hashPath": "epplus.7.0.8.nupkg.sha512"
},
"EPPlus.Interfaces/6.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-y7dkrOoE1ZR9Vgy1Jf2rEIaTf3SHlUjYt01NklP+F5Qh7S2ruPbzTcpYLRWMeXiG8XL8h2jqX4CyIkFt3NQGZw==",
"path": "epplus.interfaces/6.1.1",
"hashPath": "epplus.interfaces.6.1.1.nupkg.sha512"
},
"EPPlus.System.Drawing/6.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lRF5gHYrmkHOOiLMI0t6q8zNYjUrzRgAM5BCXumv5xiqXko8fx3AWI+HCNZfhEqVFGOop+42KfR5GiUcCoyoMw==",
"path": "epplus.system.drawing/6.1.1",
"hashPath": "epplus.system.drawing.6.1.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
"path": "microsoft.extensions.configuration/7.0.0",
"hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
"path": "microsoft.extensions.configuration.fileextensions/7.0.0",
"hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
"path": "microsoft.extensions.configuration.json/7.0.0",
"hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==",
"path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2",
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
"path": "microsoft.extensions.fileproviders.abstractions/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
"path": "microsoft.extensions.fileproviders.physical/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==",
"path": "microsoft.extensions.filesystemglobbing/7.0.0",
"hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/8.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==",
"path": "microsoft.extensions.logging.abstractions/8.0.2",
"hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
"path": "microsoft.extensions.primitives/7.0.0",
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
},
"Microsoft.IO.RecyclableMemoryStream/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-irv0HuqoH8Ig5i2fO+8dmDNdFdsrO+DoQcedwIlb810qpZHBNQHZLW7C/AHBQDgLLpw2T96vmMAy/aE4Yj55Sg==",
"path": "microsoft.io.recyclablememorystream/3.0.0",
"hashPath": "microsoft.io.recyclablememorystream.3.0.0.nupkg.sha512"
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==",
"path": "microsoft.win32.systemevents/7.0.0",
"hashPath": "microsoft.win32.systemevents.7.0.0.nupkg.sha512"
},
"Npgsql/9.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tPvY61CxOAWxNsKLEBg+oR646X4Bc8UmyQ/tJszL/7mEmIXQnnBhVJZrZEEUv0Bstu0mEsHZD5At3EO8zQRAYw==",
"path": "npgsql/9.0.3",
"hashPath": "npgsql.9.0.3.nupkg.sha512"
},
"runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-A8v6PGmk+UGbfWo5Ixup0lPM4swuSwOiayJExZwKIOjTlFFQIsu3QnDXECosBEyrWSPryxBVrdqtJyhK3BaupQ==",
"path": "runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.native.system.data.sqlclient.sni.4.4.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"
},
"System.ComponentModel.Annotations/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==",
"path": "system.componentmodel.annotations/5.0.0",
"hashPath": "system.componentmodel.annotations.5.0.0.nupkg.sha512"
},
"System.Data.SqlClient/4.9.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-j4KJO+vC62NyUtNHz854njEqXbT8OmAa5jb1nrGfYWBOcggyYUQE0w/snXeaCjdvkSKWuUD+hfvlbN8pTrJTXg==",
"path": "system.data.sqlclient/4.9.0",
"hashPath": "system.data.sqlclient.4.9.0.nupkg.sha512"
},
"System.Diagnostics.DiagnosticSource/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==",
"path": "system.diagnostics.diagnosticsource/8.0.1",
"hashPath": "system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512"
},
"System.Drawing.Common/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
"path": "system.drawing.common/7.0.0",
"hashPath": "system.drawing.common.7.0.0.nupkg.sha512"
},
"System.Formats.Asn1/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-+nfpV0afLmvJW8+pLlHxRjz3oZJw4fkyU9MMEaMhCsHi/SN9bGF9q79ROubDiwTiCHezmK0uCWkPP7tGFP/4yg==",
"path": "system.formats.asn1/7.0.0",
"hashPath": "system.formats.asn1.7.0.0.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"System.Security.Cryptography.Pkcs/7.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yhwEHH5Gzl/VoADrXtt5XC95OFoSjNSWLHNutE7GwdOgefZVRvEXRSooSpL8HHm3qmdd9epqzsWg28UJemt22w==",
"path": "system.security.cryptography.pkcs/7.0.3",
"hashPath": "system.security.cryptography.pkcs.7.0.3.nupkg.sha512"
},
"System.Text.Encoding.CodePages/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LSyCblMpvOe0N3E+8e0skHcrIhgV2huaNcjUUEa8hRtgEAm36aGkRoC8Jxlb6Ra6GSfF29ftduPNywin8XolzQ==",
"path": "system.text.encoding.codepages/7.0.0",
"hashPath": "system.text.encoding.codepages.7.0.0.nupkg.sha512"
},
"System.Text.Encodings.Web/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
"path": "system.text.encodings.web/8.0.0",
"hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512"
},
"System.Text.Json/8.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
"path": "system.text.json/8.0.5",
"hashPath": "system.text.json.8.0.5.nupkg.sha512"
}
}
}

View File

@ -0,0 +1,24 @@
{
"runtimeOptions": {
"tfm": "net7.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "7.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "7.0.0"
}
],
"additionalProbingPaths": [
"C:\\Users\\admin\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\admin\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true,
"Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
}
}
}

Binary file not shown.

View File

@ -0,0 +1 @@
238fb3e101dff2cb7cc029d455d9a077821b0d73582df6327d7c0245af1b9b1c

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,90 @@
{
"format": 1,
"restore": {
"D:\\Source\\Test-Jenkins\\QuizMaster\\QuizMaster.csproj": {}
},
"projects": {
"D:\\Source\\Test-Jenkins\\QuizMaster\\QuizMaster.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\Source\\Test-Jenkins\\QuizMaster\\QuizMaster.csproj",
"projectName": "QuizMaster",
"projectPath": "D:\\Source\\Test-Jenkins\\QuizMaster\\QuizMaster.csproj",
"packagesPath": "C:\\Users\\admin\\.nuget\\packages\\",
"outputPath": "D:\\Source\\Test-Jenkins\\QuizMaster\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\admin\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net7.0-windows"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net7.0-windows7.0": {
"targetAlias": "net7.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.200"
},
"frameworks": {
"net7.0-windows7.0": {
"targetAlias": "net7.0-windows",
"dependencies": {
"EPPlus": {
"target": "Package",
"version": "[7.0.8, )"
},
"Npgsql": {
"target": "Package",
"version": "[9.0.3, )"
},
"System.Data.SqlClient": {
"target": "Package",
"version": "[4.9.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WindowsForms": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.203\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@ -0,0 +1,16 @@
<?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)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\admin\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.13.2</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\admin\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)system.text.json\8.0.5\buildTransitive\net6.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\8.0.5\buildTransitive\net6.0\System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\8.0.2\buildTransitive\net6.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
</ImportGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,39 @@
{
"version": 2,
"dgSpecHash": "9ykJdn/zYVk=",
"success": true,
"projectFilePath": "D:\\Source\\Test-Jenkins\\QuizMaster\\QuizMaster.csproj",
"expectedPackageFiles": [
"C:\\Users\\admin\\.nuget\\packages\\epplus\\7.0.8\\epplus.7.0.8.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\epplus.interfaces\\6.1.1\\epplus.interfaces.6.1.1.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\epplus.system.drawing\\6.1.1\\epplus.system.drawing.6.1.1.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.configuration\\7.0.0\\microsoft.extensions.configuration.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\7.0.0\\microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\7.0.0\\microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.configuration.json\\7.0.0\\microsoft.extensions.configuration.json.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\7.0.0\\microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\7.0.0\\microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\7.0.0\\microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.extensions.primitives\\7.0.0\\microsoft.extensions.primitives.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.io.recyclablememorystream\\3.0.0\\microsoft.io.recyclablememorystream.3.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\microsoft.win32.systemevents\\7.0.0\\microsoft.win32.systemevents.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\npgsql\\9.0.3\\npgsql.9.0.3.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\runtime.win-x64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\runtime.win-x86.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.componentmodel.annotations\\5.0.0\\system.componentmodel.annotations.5.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.data.sqlclient\\4.9.0\\system.data.sqlclient.4.9.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.1\\system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.drawing.common\\7.0.0\\system.drawing.common.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.formats.asn1\\7.0.0\\system.formats.asn1.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.security.cryptography.pkcs\\7.0.3\\system.security.cryptography.pkcs.7.0.3.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.text.encoding.codepages\\7.0.0\\system.text.encoding.codepages.7.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\system.text.encodings.web.8.0.0.nupkg.sha512",
"C:\\Users\\admin\\.nuget\\packages\\system.text.json\\8.0.5\\system.text.json.8.0.5.nupkg.sha512"
],
"logs": []
}