【问题标题】:Run a dll of application through C#通过 C# 运行应用程序的 dll
【发布时间】:2020-05-18 09:38:18
【问题描述】:

我正在尝试通过 c# 代码调用一个接受命令行参数的 dll 文件。

当我直接从 cmd 窗口尝试时,它可以工作,但如果我尝试从 C# 调用它,则会显示以下错误:“没有应用程序与此操作的指定文件关联”

示例 cmd 命令 - C:\Users\用户名\source\repos\addconsole\addconsole\bin\Debug\netcoreapp3.1>dotnet AddConsole.dll 1 2 3

 static void Main(string[] args)
 {
   var proc1 = new ProcessStartInfo();
   proc1.UseShellExecute = true;
   proc1.WorkingDirectory = @"C:\Users\user name\source\repos\addconsole\addconsole\bin\Debug\netcoreapp3.1";
   proc1.FileName = @"addconsole.dll";
   proc1.Arguments = "1 2 3";
   Process.Start(proc1);
 }

需要有关此方面的帮助。请注意,此应用程序没有需要调用的 exe 文件,它有一个 dll 文件,该文件具有执行操作的 main 函数。

【问题讨论】:

  • 您可以使用 dotnet 运行它吗?或者,由于这已经在 .NET 中,只要您使用兼容的框架,您就可以将程序集加载到新的 appdomain 中,然后通过反射启动它?
  • 离题,我知道,但是“一个通过 c# 代码接受命令行参数的 dll 文件” ...我想知道这是谁的想法,背后的原因是什么。
  • 目前需要调用的dll文件像控制台一样使用。我的要求是使其成为 web-api,但在需要时将其保留为控制台类型的应用程序。因此,如果我通过命令行并且 args.count > 0 我将使用它们或提示用户通过 console.writline 输入输入。

标签: c# .net asp.net-core dll console-application


【解决方案1】:

您实际上需要调用dotnet.exe 并提供相关参数。因此,将 FileName 设置为 dotnet,其余作为参数。

var proc1 = new ProcessStartInfo();
proc1.UseShellExecute = true;
proc1.WorkingDirectory = @"C:\Users\user name\source\repos\addconsole\addconsole\bin\Debug\netcoreapp3.1";
proc1.Arguments = "\"addconsole.dll\" 1 2 3";
proc1.FileName = "dotnet.exe";
Process.Start(proc1);

【讨论】:

  • 完美..这只是将 dotnet 修改为“dotnet.exe”。非常感谢。建议更改答案中的代码行。
猜你喜欢
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 2013-02-09
相关资源
最近更新 更多