private async void btnGenerate_Click(object sender, EventArgs e) { try { ProjectItem lastItem = null; if (!txtSavePath.Text.IsNullOrWhiteSpace()) { lastItem = this.selectedProject.ProjectDte.AddFolderToProject(txtSavePath.Text); } var saveDir = Path.Combine(selectedProject.ProjectDirectoryName, txtSavePath.Text); if (!Directory.Exists(saveDir)) { Directory.CreateDirectory(saveDir); } //放个临时文件夹 再用AddFileFromCopy的方式 添加到项目中,增加了IO操作 //实在没找到用什么方法可以直接添加一个现有的文件 string generatorTempDir = Path.Combine(Constant.BasePath, "generate_temp"); bool shouldDeleteTempDir = false; if (!Directory.Exists(generatorTempDir)) { shouldDeleteTempDir = true; Directory.CreateDirectory(generatorTempDir); } List <TableInfo> checkedTables = new List <TableInfo>(); foreach (var item in cbxlTables.CheckedItems) { var table = all.Tables.FirstOrDefault(r => r.Name.EqualsIgnoreCase(item.ToString())); if (table != null) { checkedTables.Add(table); } } #region 实体类创建 var generator = Factory.Generator(); string path = txtSavePath.Text.Split(new[] { "/", "\\" }, StringSplitOptions.RemoveEmptyEntries)?.Join("."); foreach (var table in checkedTables) { await ShowBuildMsgAsync($"开始为您创建实体:\"{table.Name}.cs\""); //这里无需等待 await Task.Run(async() => { try { string classContent = generator.GenerateEntity(table, all, selectedProject.ProjectName, path); var fileFullName = Path.Combine(saveDir, table.Name + ".cs"); if (!File.Exists(fileFullName)) { var fileTempFullName = Path.Combine(generatorTempDir, table.Name + ".cs"); File.WriteAllText(fileTempFullName, classContent, Encoding.UTF8); if (lastItem != null) { lastItem.AddFilesToProject(fileTempFullName); } else { this.selectedProject.ProjectDte.AddFilesToProject(fileTempFullName); } selectedProject.ProjectDte.Save(); File.Delete(fileTempFullName); } else { File.WriteAllText(fileFullName, classContent, Encoding.UTF8); } await ShowBuildMsgAsync($"实体文件[{table.Name}.cs]创建完成"); } catch (Exception ex) { await ShowBuildMsgAsync($"创建实体文件[{table.Name}.cs]出现错误:{JsonHelper.ToJson(ex)}"); } }); } #endregion #region dbcontext创建 if (cbxGenerateContext.Checked) { string contextName = txtContextPrefix.Text + "DbContext"; string contextClassContent = generator.GenrateContext(checkedTables, contextName, selectedProject.ProjectName, path); try { var fileFullName = Path.Combine(saveDir, contextName + ".cs"); await ShowBuildMsgAsync($"正在为您创建:\"{contextName}.cs\""); if (!File.Exists(fileFullName)) { var fileTempFullName = Path.Combine(generatorTempDir, contextName + ".cs"); File.WriteAllText(fileTempFullName, contextClassContent, Encoding.UTF8); if (lastItem != null) { lastItem.AddFilesToProject(fileTempFullName); } else { this.selectedProject.ProjectDte.AddFilesToProject(fileTempFullName); } selectedProject.ProjectDte.Save(); File.Delete(fileTempFullName); } else { File.WriteAllText(fileFullName, contextClassContent, Encoding.UTF8); } } catch (Exception ex) { await ShowBuildMsgAsync($"创建DbContext文件[{contextName}.cs]出现错误:{JsonHelper.ToJson(ex)}"); } } #endregion if (shouldDeleteTempDir) { Directory.Delete(generatorTempDir, true); } LastDataConfiguration.Instance.Set("SavePath", txtSavePath.Text); LastDataConfiguration.Instance.Set("ContextPrefix", txtContextPrefix.Text); LastDataConfiguration.Instance.Set("IsGenerateContext", cbxGenerateContext.Checked ? "true" : "false"); LastDataConfiguration.Instance.Save(); await ShowBuildMsgAsync("已为您创建完成!"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }