C#调用控制台程序实现.net core 调用 .net framework

背景:金蝶dll是.net framework, 在.net core 项目不兼容,这里说明控制台的方式

(另一种做法,再弄一个.net framework网站项目负责调用金蝶服务)

 

主程序 .Net Core

 private static string CMDRun(string command)
        {
            var dir = AppDomain.CurrentDomain.BaseDirectory + @"\api\";


            if (!System.IO.Directory.Exists(dir))
            {
                return "api目录不存在";
            }

            var path = System.IO.Directory.GetFiles(dir, "*.exe").FirstOrDefault();

            if (string.IsNullOrEmpty(path))
            {
                return "api目录不存在exe程序";
            }

            var root = System.IO.Directory.GetDirectoryRoot(path);

            var fileName = System.IO.Path.GetFileName(path);


            using (Process p = new Process())
            {

                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.FileName = @"cmd.exe";
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.UseShellExecute = false;//将此属性设置为 false 使您能够重定向输入流、输出流和错误流
                p.Start();
                p.StandardInput.WriteLine(@"echo off ");//不显示命令
                p.StandardInput.WriteLine(root.Replace("\\", ""));  //先转项目所在的盘
                p.StandardInput.WriteLine($@"cd {dir}");  //再转到exe所在目录下
                p.StandardInput.WriteLine($"{fileName} {command}");//执行exe
                p.StandardInput.WriteLine("exit");
                

                string result = p.StandardOutput.ReadToEnd();

                var array = result.Split("\r\n");

                p.Close();
                p.Dispose();

                return array[array.Length - 3];
            }
        }

控制台 .Net Framework

private static void Main(string[] args)
 {
        
            if (args[0] == "GetProductList")
            {
                if (args.Length < 3)
                {
                    Console.WriteLine("需要参数[methodName,StartRow,Limit]");
                    return;
                }
                int.TryParse(args[1], out int StartRow);
                int.TryParse(args[2], out int Limit);
//具体的事,比如这里是金蝶服务 string resultStr = api_k3_SS.GetProductList(StartRow, Limit);
           Console.WriteLine(
resultStr);
            } 
}

 

posted @ 2022-02-08 10:24  212的s  阅读(1206)  评论(0编辑  收藏  举报