public static bool ExecueNuget_GrpcNet(string filePath, ServiceModel serviceModel, string tempKey, out string csNamespace, out string errorMsg, out string resultDic) { csNamespace = string.Empty; errorMsg = string.Empty; resultDic = string.Empty; if (!ExecuteDll_GrpcNet(filePath, tempKey, out csNamespace, out errorMsg, out resultDic)) { return(false); } var nuspecXml = GenUtilityOrigin_GrpcNet.GenNuspecXml(resultDic, serviceModel, csNamespace); var nuspecFilePath = Path.Combine(resultDic, "Package.nuspec"); Utility.WriteNewFile(nuspecFilePath, nuspecXml); // 生成nuget包msbu var error = string.Empty; Utility.RunCmd(Utility.NugetExePath, "pack " + nuspecFilePath + " -OutputDirectory " + resultDic, out error); // 直接发布 if (serviceModel.Publish) { var nugetServer = NugetServerHelper.Get(); var nugetPks = new DirectoryInfo(resultDic).GetFiles("*.nupkg"); if (nugetPks.Length <= 0) { errorMsg = "nupkg not gen"; return(false); } Utility.RunCmd(Utility.NugetExePath, "push " + nugetPks[0].FullName + " -s " + nugetServer.Address + " " + nugetServer.Key, out error); } return(true); }
/// <summary> /// 生成异步或者通过的代码文件 /// </summary> /// <param name="fullFilePathList"></param> public static bool Execute_GrpcNet(string filePath, EnumGrpcGenType genType, string tempKey, out string csNamespace, out string errorMsg, out string resultDic) { csNamespace = string.Empty; errorMsg = string.Empty; resultDic = string.Empty; if (!Utility.CheckFilePath(filePath)) { errorMsg = "没有文件可以生成"; return(false); } var csFiles = GenUtilityOrigin.GenGrpc(filePath, out errorMsg, out csNamespace); if (!string.IsNullOrEmpty(errorMsg)) { return(false); } if (csFiles == null || csFiles.Length == 0) { errorMsg = "proto 协议文件有异常"; return(false); } resultDic = csFiles[0].Directory.FullName; // 生成配置文件 var coreConfigs = GenUtilityOrigin.MakeCoreConfig_GrpcNet(); var coreConfigDic = Path.Combine(resultDic, "coreconfigs"); Utility.MakeDir(coreConfigDic); foreach (var configPair in coreConfigs) { var dllconfigFileName = Path.Combine(coreConfigDic, configPair.Key); Utility.WriteNewFile(dllconfigFileName, configPair.Value); } //如果只需要生成原生的,就直接返回 if (genType == EnumGrpcGenType.Origin) { return(true); } #region 第二次编译 // 每次生成都只能生成一次文件夹路径 var fileName = new FileInfo(filePath).Name; var projDicPath = GrpcGlobal.GenProjDic(fileName); if (string.IsNullOrEmpty(projDicPath)) { errorMsg = "Create gen temp folder error,may u have already open it!"; return(false); } // 组织这些文件成为一个project.xml文件 csFiles = new DirectoryInfo(resultDic).GetFiles("*.cs"); var projXml = BuildGrpcProject.MakeProj(csFiles, csNamespace, "netstandard2.1;netcoreapp3.0;net5.0", "grpch2"); var projXmlPath = Path.Combine(projDicPath, csNamespace + ".csproj"); Utility.WriteNewFile(projXmlPath, projXml); // 拷贝json文件 GrpcGlobal.MoveProjectAsset(fileName); // 调用MSBuild生成这个项目 var msbuildPath = GrpcGlobal.MsBuildPath(); if (string.IsNullOrEmpty(msbuildPath)) { errorMsg = "VS2017安装目录中找不到MSBuild.exe,或者安装的VS2017目录没有2017标识,或者VS2017从未打开过, 请检查注册表 \r\n Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache"; return(false); } // 调用restore Utility.RunCmd("dotnet", "restore", projDicPath, out errorMsg); // 为防止有的客户端路径中包含空格影响参数的设置 // 设置运行的目录在客户端当前目录调用MSBuild Utility.RunProcess(msbuildPath, projDicPath, csNamespace + ".csproj"); #endregion var grpcDllPath = Path.Combine(projDicPath, @"bin\Debug\netstandard2.1", csNamespace + ".dll"); resultDic = GenUtilityOrigin_GrpcNet.ToResultDic(fileName, grpcDllPath, csNamespace, out errorMsg); if (!string.IsNullOrEmpty(errorMsg)) { return(false); } return(true); }