【问题标题】:How do I add a console C# application to a ASP.NET WebSite?如何将控制台 C# 应用程序添加到 ASP.NET 网站?
【发布时间】:2015-12-10 19:08:49
【问题描述】:

我的问题有点类似于这个帖子:How to include another project Console Application exe in an Asp.Net website?

然而,我被指示提出一个新问题,因为我的问题没有得到回答,我无法对该主题发表评论。

所以,我的情况是:我有一个编译为 exe 的 C# 应用程序(目前)。它作为桌面应用程序运行良好。现在我需要在网站上托管应用程序,以便用户可以通过浏览器使用它。

我认为 asp.net 将是一个很好的起点,并创建了一个 WebSite 应用程序。现在我该如何引用 C# 应用程序文件,以便我可以从新的 WebSite 应用程序调用这些方法?

我尝试在控制台应用程序中包含构建后事件以将文件复制到网站文件夹,但我仍然无法引用它们。

也欢迎对我正在尝试做的任何其他建议:)

编辑:我希望应用程序在服务器上运行,然后我将在用户的浏览器上显示其输出。

【问题讨论】:

  • 您希望控制台应用程序在客户端计算机上还是在服务器上执行?
  • 如果您只需要在控制台应用程序中执行方法而不实际运行控制台应用程序本身,为什么不在一个单独的类库中重构您的方法,您可以从您的 Web 应用程序中引用它?
  • 嘿@mason,我希望控制台应用程序的功能在服务器上执行
  • 会按照@amuz 所说的方式满足您的需求吗?
  • 嘿@amuz ,这听起来是正确的,因为我不需要控制台应用程序本身运行。我只需要获取一些输入(来自用户的浏览器),在服务器上执行应用程序的方法,然后生成我再次显示在用户浏览器上的输出。解决这个问题的最佳方法是什么?

标签: c# asp.net .net visual-studio


【解决方案1】:

假设我明白你想要什么:

1- 您需要将您的功能转移到Class Library 项目。

2- 在您的网站中添加对DLL 的引用

3- 随心所欲地使用功能。

但是,您不能直接使用.exe 类型的汇编文件中的功能。

【讨论】:

  • 谢谢你,我认为这是有道理的,我会尝试你的建议。最后一个问题,我的原始功能需要引用外部 DLL(例如 AForge、Emgu),所以我猜我也需要将这些引用添加到类库项目中。我的问题是,一旦类库项目完成,我必须在网站项目中添加多少个 DLL 引用?我指的是 1 还是 1 + 多少个外部 DLL?
  • @sidd,网站中只有一个,其他所有引用都应该添加到类库项目中
【解决方案2】:

如果您不需要运行控制台应用程序而只需要使用控制台应用程序中定义的方法,那么我将在单独的类库中重构这些方法,然后在我的 Web 中添加对类库的引用应用。然后在网页中构建一个调用适当方法的接口。

这是来自 MSDN 的演练,向您展示如何Create a web application project with a class library

【讨论】:

  • 感谢您的链接,它看起来像是我开始的东西!
【解决方案3】:

您不应该在服务器上运行控制台应用程序,因为这很糟糕!在 Windows 上,为每个请求创建一个全新的进程并不是一个好主意。

重构控制台应用程序以采用 TextWriter 或(在我看来更好,但可能需要更多重构)以某种合乎逻辑的方式返回结果。

在极端情况下,您只需将 Console.Out 发送到库和 Response.Output 即可。

您似乎不太可能真的只是想这样做,但这可能是您可以逃脱的最少的事情,这还不错。

按照Console.WriteLine("Hello World") 的思路思考:

var lib = new MyLib(Console.Out);
lib.DoSomething();

在这种情况下的ctor是:

public MyLib(TextWriter writer)
{
  _writer = writer;
}

DoSomething() 在哪里:

public void DoSomething()
{
   _writer.WriteLine("Hello World");
}

然后,您将在网络上输出您需要输出的内容,并将您的输出放在那里,首先输出<pre> 标签,然后执行以下操作:

var lib = new MyLib(Response.Output);
lib.DoSomething();


public string TellMeSomething()
{
  return "Hello World";
}

我几乎不想推荐这个,因为我认为完全重构它会更好。所以 DoSomething 变成了 TellMeSomething 并且实现类似于:

public string TellMeSomething()
{
  return "Hello World";
}

【讨论】:

  • 我想你会很高兴知道我倾向于创建一个新的类库并从网站引用它们,而不是在服务器上运行控制台应用程序。话虽如此,谢谢您的详细回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
相关资源
最近更新 更多