From 70ff1350bbb60c5e5eff52f10e835e41f7c6a10f Mon Sep 17 00:00:00 2001 From: "754998852@qq.com" <754998852@qq.com> Date: Wed, 20 Nov 2024 17:47:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=AC=E5=8F=B8=E7=BA=A7?= =?UTF-8?q?=E5=9F=B9=E8=AE=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DataBase/版本日志/SGGLDB_V2024-11-20.sql | 2 + SGGL/BLL/API/HSSE/APITestPlanService.cs | 21 +- SGGL/BLL/API/HSSE/APITestRecordService.cs | 243 +- SGGL/BLL/API/HSSE/APITrainingTaskService.cs | 51 +- SGGL/BLL/BLL.csproj | 44 +- SGGL/BLL/Common/CodeRecordsService.cs | 130 ++ SGGL/BLL/Common/Redis/ICache.cs | 127 + SGGL/BLL/Common/Redis/Redis.cs | 308 +++ SGGL/BLL/Common/Redis/RedisHelper.cs | 2077 +++++++++++++++++ SGGL/BLL/HSSE/EduTrain/TestRecordService.cs | 32 + SGGL/BLL/HSSE/SitePerson/PersonService.cs | 18 + SGGL/BLL/OpenService/GetDataService.cs | 28 + SGGL/FineUIPro.Web/ErrLog.txt | 6 + .../HSSE/EduTrain/CompanyTraining.aspx | 2 +- .../EduTrain/CompanyTrainingItemSave.aspx | 6 +- .../Person/EduTrain/TestRecord.aspx | 2 +- .../Person/EduTrain/TestRecord.aspx.cs | 2 +- SGGL/Model/APIItem/HSSE/TestPlanItem.cs | 13 + SGGL/Model/APIItem/HSSE/TestRecordItem.cs | 16 +- .../APIItem/HSSE/TrainingTaskItemItem.cs | 19 +- SGGL/Model/Model.cs | 26 +- .../Controllers/HSSE/TestPlanController.cs | 214 +- .../Controllers/HSSE/TestRecordController.cs | 260 ++- SGGL/WebAPI/Controllers/PersonController.cs | 5 +- .../PublishProfiles/FolderProfile.pubxml | 2 +- 25 files changed, 3546 insertions(+), 108 deletions(-) create mode 100644 DataBase/版本日志/SGGLDB_V2024-11-20.sql create mode 100644 SGGL/BLL/Common/Redis/ICache.cs create mode 100644 SGGL/BLL/Common/Redis/Redis.cs create mode 100644 SGGL/BLL/Common/Redis/RedisHelper.cs diff --git a/DataBase/版本日志/SGGLDB_V2024-11-20.sql b/DataBase/版本日志/SGGLDB_V2024-11-20.sql new file mode 100644 index 0000000..655cfc4 --- /dev/null +++ b/DataBase/版本日志/SGGLDB_V2024-11-20.sql @@ -0,0 +1,2 @@ +alter table Training_TestRecord +add CompanyTrainingItemId nvarchar(50) null; \ No newline at end of file diff --git a/SGGL/BLL/API/HSSE/APITestPlanService.cs b/SGGL/BLL/API/HSSE/APITestPlanService.cs index 3b206c2..d72d0c5 100644 --- a/SGGL/BLL/API/HSSE/APITestPlanService.cs +++ b/SGGL/BLL/API/HSSE/APITestPlanService.cs @@ -109,9 +109,13 @@ namespace BLL UnitNames = UnitService.getUnitNamesUnitIds(x.UnitIds), WorkPostIds = x.WorkPostIds, WorkPostNames = WorkPostService.getWorkPostNamesWorkPostIds(x.WorkPostIds), + DepartIds = x.DepartIds, + DepartNames = WorkPostService.getDepartNamesByIdsForApi(x.DepartIds), States = x.States, QRCodeUrl = x.QRCodeUrl.Replace('\\', '/'), TrainingPlanId = x.PlanId, + TrainTypeId = x.TrainTypeId, + TrainTypeName = db.Base_TrainType.Where(xx => xx.TrainTypeId == x.TrainTypeId).Select(xx => xx.TrainTypeName).FirstOrDefault() }; return getDataLists.FirstOrDefault(); } @@ -259,8 +263,9 @@ namespace BLL ////新增考试人员明细 foreach (var item in getTestPlan.TestRecordItems) { - var person = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == item.TestManId); - if (person != null) + var user = db.Sys_User.FirstOrDefault(e => e.UserId == item.TestManId); + var person = db.SitePerson_Person.FirstOrDefault(e => e.PersonId == item.TestManId); + if (user != null || person != null) { Model.Training_TestRecord newTrainDetail = new Model.Training_TestRecord { @@ -383,15 +388,17 @@ namespace BLL TestStartTime = DateTime.Now, TestPalce = getTrainingPlan.TeachAddress, UnitIds = getTrainingPlan.UnitIds, - UnitNames = UnitService.getUnitNamesUnitIds(getTrainingPlan.UnitIds), + UnitNames = UnitService.getUnitNamesUnitIdsForApi(getTrainingPlan.UnitIds), WorkPostIds = getTrainingPlan.WorkPostId, - WorkPostNames = WorkPostService.getWorkPostNamesWorkPostIds(getTrainingPlan.WorkPostId), + WorkPostNames = WorkPostService.getWorkPostNamesWorkPostIdsForApi(getTrainingPlan.WorkPostId), + DepartIds = getTrainingPlan.DepartIds, + DepartNames = WorkPostService.getDepartNamesByIdsForApi(getTrainingPlan.DepartIds), PlanId = getTrainingPlan.PlanId, States = "0", }; string unitId = string.Empty; - var user = db.Sys_User.FirstOrDefault(e => e.UserId == userId); + var user = db.Sys_User.FirstOrDefault(e => e.UserId == userId); if (user != null) { unitId = user.UnitId; @@ -441,7 +448,7 @@ namespace BLL { db.Training_TestPlan.InsertOnSubmit(newTestPlan); db.SubmitChanges(); - CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitId(Const.ProjectTestPlanMenuId, newTestPlan.ProjectId, null, testPlanId, newTestPlan.PlanDate); + CodeRecordsService.InsertCodeRecordsByMenuIdProjectIdUnitIdForApi(Const.ProjectTestPlanMenuId, newTestPlan.ProjectId, null, testPlanId, newTestPlan.PlanDate); ///培训人员 var getTrainingTask = (from x in db.Training_Task where x.PlanId == trainingPlanId select x).ToList(); foreach (var itemTask in getTrainingTask) @@ -452,7 +459,7 @@ namespace BLL ProjectId = getTrainingPlan.ProjectId, TestPlanId = testPlanId, TestManId = itemTask.UserId, - TestType= db.Base_TrainType.First(z=>z.TrainTypeId == getTrainingPlan.TrainTypeId).TrainTypeName, + TestType = db.Base_TrainType.First(z => z.TrainTypeId == getTrainingPlan.TrainTypeId).TrainTypeName, }; db.Training_TestRecord.InsertOnSubmit(newTestRecord); diff --git a/SGGL/BLL/API/HSSE/APITestRecordService.cs b/SGGL/BLL/API/HSSE/APITestRecordService.cs index 84fc7bb..ac9e18a 100644 --- a/SGGL/BLL/API/HSSE/APITestRecordService.cs +++ b/SGGL/BLL/API/HSSE/APITestRecordService.cs @@ -29,7 +29,7 @@ namespace BLL ProjectId = x.ProjectId, TestPlanId = x.TestPlanId, TestManId = x.TestManId, - TestManName = db.SitePerson_Person.FirstOrDefault(p => p.PersonId == x.TestManId).PersonName, + TestManName = getPname(x.TestManId), TestStartTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestStartTime), TestEndTime = string.Format("{0:yyyy-MM-dd HH:mm}", x.TestEndTime), TestScores = x.TestScores ?? 0, @@ -39,6 +39,26 @@ namespace BLL return getDataLists; } } + + private static string getPname(string TestManId) { + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { + var pname = ""; + var personModel = db.SitePerson_Person.FirstOrDefault(p => p.PersonId == TestManId); + if (personModel==null) + { + var unameModel = db.Sys_User.FirstOrDefault(p=>p.UserId== TestManId); + if (unameModel!=null) + { + pname = unameModel.UserName; + } + } + else { + pname = personModel.PersonName; + } + + return pname; + } + } #endregion #region 根据试卷ID获取试卷记录详细 @@ -81,7 +101,7 @@ namespace BLL /// /// /// - public static string CreateTestRecordItem(Model.Training_TestPlan getTestPlan, string testRecordId, Model.SitePerson_Person person) + public static string CreateTestRecordItem(Model.Training_TestPlan getTestPlan, string testRecordId, Model.SitePerson_Person person, Model.Sys_User user) { using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) { @@ -108,9 +128,22 @@ namespace BLL int sumTestType3Count = testPlanTrainings.Sum(x => x.TestType3Count) ?? 0; ////获取类型下适合岗位试题集合 - var getTestTrainingItemALLs = from x in db.Training_TestTrainingItem - where x.TrainingId != null && (x.WorkPostIds == null || (x.WorkPostIds.Contains(person.WorkPostId) && person.WorkPostId != null)) - select x; + List getTestTrainingItemALLs; + string WorkPostId = ""; + string DepartId = ""; + if (person != null) + { + WorkPostId = person.WorkPostId; + } + if (user != null) + { + DepartId = user.DepartId; + } + + getTestTrainingItemALLs = (from x in db.Training_TestTrainingItem + where x.TrainingId != null && (x.WorkPostIds == null || string.IsNullOrEmpty(WorkPostId) || x.WorkPostIds.Contains(WorkPostId)) || (x.DepartIds == null || string.IsNullOrEmpty(DepartId) || x.DepartIds.Contains(DepartId)) + + select x).ToList(); foreach (var itemT in testPlanTrainings) { //// 获取类型下的题目 @@ -201,12 +234,170 @@ namespace BLL db.Training_TestRecordItem.InsertAllOnSubmit(getItems); db.SubmitChanges(); + BLL.RedisHelper redis = new BLL.RedisHelper(); + redis.SetObjString(testRecordId, getItems); } } } return testRecordId; } #endregion + + public static string CreateTestRecordItem(Model.Training_CompanyTrainingItem getCompanyTraining, string testRecordId, Model.SitePerson_Person person, Model.Sys_User user) + { + + + + + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var trainingIds = getCompanyTraining.TestTrainingIds.Split(','); + var testTrainings = db.Training_TestTraining.Where(x => trainingIds.Contains(x.TrainingId)); + var getTestRecord = db.Training_TestRecord.FirstOrDefault(x => x.TestRecordId == testRecordId); + if (getTestRecord != null && !getTestRecord.TestStartTime.HasValue) + { + ////考试时长 + getTestRecord.Duration = 120; + getTestRecord.TestStartTime = DateTime.Now; + db.SubmitChanges(); + } + + ////当前人考试记录 未加入考试计划的 当考试开始扫码时 不允许再参与考试 + var item = db.Training_TestRecordItem.FirstOrDefault(x => x.TestRecordId == getTestRecord.TestRecordId); + if (item == null) + { + List getTestTrainingItemList = new List(); + //var testPlanTrainings = from x in db.Training_TestPlanTraining + // where x.TestPlanId == getTestPlan.TestPlanId + // select x; + //// 计划考试中单选、多选、判断题总数 + var sysTestRule = Funs.DB.Sys_TestRule.FirstOrDefault(); + + int sumTestType1Count = 0;// testPlanTrainings.Sum(x => x.TestType1Count) ?? 0; + int sumTestType2Count = 0;//testPlanTrainings.Sum(x => x.TestType2Count) ?? 0; + int sumTestType3Count = 0;//testPlanTrainings.Sum(x => x.TestType3Count) ?? 0; + if (sysTestRule != null) + { + + sumTestType1Count = sysTestRule.SCount; + sumTestType2Count = sysTestRule.MCount; + sumTestType3Count = sysTestRule.JCount; + } + ////获取类型下适合岗位试题集合 + List getTestTrainingItemALLs; + string WorkPostId = ""; + string DepartId = ""; + if (person != null) + { + WorkPostId = person.WorkPostId; + } + if (user != null) + { + DepartId = user.DepartId; + } + + getTestTrainingItemALLs = (from x in db.Training_TestTrainingItem + where x.TrainingId != null && (x.WorkPostIds == null || string.IsNullOrEmpty(WorkPostId) || x.WorkPostIds.Contains(WorkPostId)) || (x.DepartIds == null || string.IsNullOrEmpty(DepartId) || x.DepartIds.Contains(DepartId)) + select x).ToList(); + foreach (var itemT in testTrainings) + { + //// 获取类型下的题目 + var getTestTrainingItems = getTestTrainingItemALLs.Where(x => x.TrainingId == itemT.TrainingId).ToList(); + if (getTestTrainingItems.Count() > 0) + { + ////单选题 + var getSItem = getTestTrainingItems.Where(x => x.TestType == "1").OrderBy(x => Guid.NewGuid()).Take(sumTestType1Count); + if (getSItem.Count() > 0) + { + getTestTrainingItemList.AddRange(getSItem); + } + ///多选题 + var getMItem = getTestTrainingItems.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid()).Take(sumTestType2Count); + if (getMItem.Count() > 0) + { + getTestTrainingItemList.AddRange(getMItem); + } + ///判断题 + var getJItem = getTestTrainingItems.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid()).Take(sumTestType3Count); + if (getJItem.Count() > 0) + { + getTestTrainingItemList.AddRange(getJItem); + } + } + } + //// 获取得到的单选题、多选题、判断题 数量 + int getDiffTestType1Count = sumTestType1Count - getTestTrainingItemList.Where(x => x.TestType == "1").Count(); + int getDiffTestType2Count = sumTestType2Count - getTestTrainingItemList.Where(x => x.TestType == "2").Count(); + int getDiffTestType3Count = sumTestType3Count - getTestTrainingItemList.Where(x => x.TestType == "3").Count(); + if (getDiffTestType1Count > 0 || getDiffTestType2Count > 0 || getDiffTestType3Count > 0) + { + var getTestTrainingItemNulls = getTestTrainingItemALLs.Where(x => x.WorkPostIds == null).ToList(); + if (getTestTrainingItemNulls.Count() > 0) + { + /// 通用且未选择的题目 + var getTestTrainingItemDiffs = getTestTrainingItemNulls.Except(getTestTrainingItemList).ToList(); + ////单选题 + if (getDiffTestType1Count > 0) + { + var getSItemD = getTestTrainingItemDiffs.Where(x => x.TestType == "1").OrderBy(x => Guid.NewGuid()).Take(getDiffTestType1Count); + if (getSItemD.Count() > 0) + { + getTestTrainingItemList.AddRange(getSItemD); + } + } + ///多选题 + if (getDiffTestType2Count > 0) + { + var getMItemD = getTestTrainingItemDiffs.Where(x => x.TestType == "2").OrderBy(x => Guid.NewGuid()).Take(getDiffTestType2Count); + if (getMItemD.Count() > 0) + { + getTestTrainingItemList.AddRange(getMItemD); + } + } + ///判断题 + if (getDiffTestType3Count > 0) + { + var getJItemD = getTestTrainingItemDiffs.Where(x => x.TestType == "3").OrderBy(x => Guid.NewGuid()).Take(getDiffTestType3Count); + if (getJItemD.Count() > 0) + { + getTestTrainingItemList.AddRange(getJItemD); + } + } + } + } + + if (getTestTrainingItemList.Count() > 0) + { + var getItems = from x in getTestTrainingItemList + select new Model.Training_TestRecordItem + { + TestRecordItemId = SQLHelper.GetNewID(), + TestRecordId = getTestRecord.TestRecordId, + TrainingItemName = x.TrainingItemName, + TrainingItemCode = x.TrainingItemCode, + Abstracts = x.Abstracts, + AttachUrl = x.AttachUrl, + TestType = x.TestType, + AItem = x.AItem, + BItem = x.BItem, + CItem = x.CItem, + DItem = x.DItem, + EItem = x.EItem, + AnswerItems = x.AnswerItems, + Score = x.TestType == "1" ? sysTestRule.SValue : (x.TestType == "2" ? sysTestRule.MValue : sysTestRule.JValue), + }; + + db.Training_TestRecordItem.InsertAllOnSubmit(getItems); + db.SubmitChanges(); + BLL.RedisHelper redis = new BLL.RedisHelper(); + redis.SetObjString(testRecordId, getItems); + } + } + } + return testRecordId; + } + + #region 根据PersonId、TestPlanId生成试卷 扫码生成试卷 /// /// 根据PersonId、TestPlanId生成试卷 扫码生成试卷 @@ -673,28 +864,32 @@ namespace BLL /// public static string getResitTestRecord(Model.Training_TestRecord getTestRecord) { - Model.Training_TestRecord newTestRecord = new Model.Training_TestRecord + using (var db = new Model.SGGLDB(Funs.ConnString)) { - TestRecordId = SQLHelper.GetNewID(), - ProjectId = getTestRecord.ProjectId, - TestPlanId = getTestRecord.TestPlanId, - TestManId = getTestRecord.TestManId, - TestType = getTestRecord.TestType, - TemporaryUser = getTestRecord.TemporaryUser, - Duration = getTestRecord.Duration, - // TestStartTime = DateTime.Now, - }; + Model.Training_TestRecord newTestRecord = new Model.Training_TestRecord + { + TestRecordId = SQLHelper.GetNewID(), + ProjectId = getTestRecord.ProjectId, + TestPlanId = getTestRecord.TestPlanId, + TestManId = getTestRecord.TestManId, + TestType = getTestRecord.TestType, + TemporaryUser = getTestRecord.TemporaryUser, + Duration = getTestRecord.Duration, + // TestStartTime = DateTime.Now, + }; - Funs.DB.Training_TestRecord.InsertOnSubmit(newTestRecord); - Funs.DB.SubmitChanges(); + db.Training_TestRecord.InsertOnSubmit(newTestRecord); + db.SubmitChanges(); - var getTestPlan = Funs.DB.Training_TestPlan.FirstOrDefault(x => x.TestPlanId == newTestRecord.TestPlanId); - var person = PersonService.GetPersonByUserId(newTestRecord.TestManId, getTestPlan.ProjectId); - if (getTestPlan != null && person != null) - { - CreateTestRecordItem(getTestPlan, newTestRecord.TestRecordId, person); + var getTestPlan = db.Training_TestPlan.FirstOrDefault(x => x.TestPlanId == newTestRecord.TestPlanId); + var user = db.Sys_User.FirstOrDefault(x => x.UserId == newTestRecord.TestManId); + var person = PersonService.GetPersonByUserIdForApi(newTestRecord.TestManId, getTestPlan.ProjectId); + if (getTestPlan != null && person != null) + { + CreateTestRecordItem(getTestPlan, newTestRecord.TestRecordId, person, user); + } + return newTestRecord.TestRecordId; } - return newTestRecord.TestRecordId; } #endregion @@ -765,5 +960,7 @@ namespace BLL return getDataLists.ToList(); } } + + } } \ No newline at end of file diff --git a/SGGL/BLL/API/HSSE/APITrainingTaskService.cs b/SGGL/BLL/API/HSSE/APITrainingTaskService.cs index 1d06cef..190cdad 100644 --- a/SGGL/BLL/API/HSSE/APITrainingTaskService.cs +++ b/SGGL/BLL/API/HSSE/APITrainingTaskService.cs @@ -71,6 +71,8 @@ namespace BLL GetDataService.CreateTrainingTaskItemByTaskId(taskId); var getDataLists = (from x in db.Training_TaskItem + join y in db.Training_CompanyTrainingItem on x.TrainingItemCode equals y.CompanyTrainingItemCode into temp + from y in temp.DefaultIfEmpty() where x.TaskId == taskId orderby x.TrainingItemCode select new Model.TrainingTaskItemItem @@ -78,15 +80,16 @@ namespace BLL TaskItemId = x.TaskItemId, TaskId = x.TaskId, PlanId = x.PlanId, + StartTime = x.StartTime, + EndTime = x.EndTime, + LearningTime = x.LearnTime, + AttachTime = y.LearningTime, + VideoProgress = x.VideoProgress, PersonId = x.PersonId, - StartTime = x.StartTime, - EndTime = x.EndTime, - LearnTime = x.LearnTime, - VideoProgress = x.VideoProgress, - TrainingItemCode = x.TrainingItemCode, + TrainingItemCode = x.TrainingItemCode, TrainingItemName = x.TrainingItemName, AttachUrl = x.AttachUrl.Replace('\\', '/'), - }).ToList(); + }).ToList(); return getDataLists; } } @@ -273,19 +276,41 @@ namespace BLL item.StartTime = startTime; } - if (!item.LearnTime.HasValue) - { - item.LearnTime = 0; - } + //if (!item.LearnTime.HasValue) + //{ + // item.LearnTime = 0; + //} if (!string.IsNullOrEmpty(VideoProgress)) { + //if (!item.VideoProgress.HasValue) + //{ + // item.VideoProgress = 0; + //} item.VideoProgress = int.Parse(VideoProgress); } var span = endTime.Subtract(startTime); - item.LearnTime = item.LearnTime.Value + (int)span.TotalMinutes; - item.EndTime = endTime; + if (!item.LearnTime.HasValue) + { + item.LearnTime = 0; + } + item.LearnTime = item.LearnTime.Value + (int)span.TotalSeconds; + item.EndTime = endTime; + db.SubmitChanges(); - return item; + + var companyTrainingItem = db.Training_CompanyTrainingItem.FirstOrDefault(x => x.CompanyTrainingItemCode == item.TrainingItemCode); + int companyTrainingItemLearnTime = companyTrainingItem?.LearningTime ?? 0; //培训教材时长(秒) + + + //如果学习时长大于培训教材时长,则关闭状态 + if (item.LearnTime > companyTrainingItemLearnTime) + { + var taskModel = db.Training_Task.FirstOrDefault(x => x.TaskId == item.TaskId); + taskModel.States = "2"; + db.SubmitChanges(); + } + + return item; } } #endregion diff --git a/SGGL/BLL/BLL.csproj b/SGGL/BLL/BLL.csproj index f14a9dc..68bb9dd 100644 --- a/SGGL/BLL/BLL.csproj +++ b/SGGL/BLL/BLL.csproj @@ -21,6 +21,8 @@ + + true @@ -66,8 +68,11 @@ ..\packages\SharpZipLib.1.3.3\lib\net45\ICSharpCode.SharpZipLib.dll - - ..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + ..\packages\Microsoft.Bcl.AsyncInterfaces.5.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\Microsoft.Extensions.Logging.Abstractions.6.0.0\lib\net461\Microsoft.Extensions.Logging.Abstractions.dll ..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll @@ -100,12 +105,18 @@ ..\packages\MicrosoftOfficeCore.15.0.0\lib\net35\Office.dll False + + ..\packages\Pipelines.Sockets.Unofficial.2.2.8\lib\net461\Pipelines.Sockets.Unofficial.dll + ..\packages\Quartz.3.7.0\lib\netstandard2.0\Quartz.dll ..\packages\RestSharp.106.15.0\lib\net452\RestSharp.dll + + ..\packages\StackExchange.Redis.2.8.16\lib\net461\StackExchange.Redis.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll @@ -122,6 +133,14 @@ + + ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll + True + True + + + ..\packages\System.IO.Pipelines.5.0.1\lib\net461\System.IO.Pipelines.dll + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll @@ -138,6 +157,11 @@ ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + @@ -151,6 +175,12 @@ + + ..\packages\System.Threading.Channels.5.0.0\lib\net461\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + @@ -269,6 +299,9 @@ + + + @@ -1142,6 +1175,13 @@ + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + - False + True False True Release