如何将控制台C#应用程序添加到ASP.NET WebSite?

4
我的问题与这个主题有些相似:如何在Asp.Net网站中包含另一个项目的控制台应用程序exe,但是因为我的问题没有得到答复,我被指示提出新的问题。
我的情况是这样的:我有一个编译为exe的C#应用程序。它作为桌面应用程序运行良好。现在我需要将该应用程序托管在网站上,以便用户可以通过他们的浏览器使用它。
我认为ASP.NET是一个不错的起点,因此创建了一个WebSite应用程序。那么,我该如何引用C#应用程序文件,以便我可以从新的WebSite应用程序调用这些方法?
我尝试使用控制台应用程序的后构建事件将文件复制到WebSite文件夹中,但我仍然无法引用它们。
欢迎提供任何其他建议 :)
编辑:我希望应用程序在服务器上运行,然后在用户的浏览器上显示其输出。

2
你想让控制台应用程序在客户端计算机上执行还是在服务器上执行? - mason
2
如果你只需要执行控制台应用程序中的方法而不是实际运行控制台应用程序本身,为什么不将这些方法重构到一个单独的类库中,然后从你的 Web 应用程序中引用它呢? - amuz
嘿@mason,我希望控制台应用程序的功能在服务器上执行。 - sidd
按照 @amuz 所说的做法是否能够满足您的需求? - mason
嘿@amuz,那听起来是正确的,因为我不需要控制台应用程序本身运行。我只需要获取一些输入(来自用户的浏览器),在服务器上执行应用程序的方法,然后产生输出,再次显示在用户的浏览器上。最好的方法是什么? - sidd
@mason 是的,我想是这样,我在这方面还是个新手,所以不是100%确定。如果我不必在服务器上实际运行控制台应用程序,而是直接调用在服务器上执行的方法,你有什么建议吗? - sidd
3个回答

5
假设我理解你的需求:
1- 您需要将功能转移到“类库”项目中。
2- 在您的网站中添加对DLL的引用。
3- 根据您的喜好使用功能。
但是,您无法直接使用类型为“.exe”的程序集文件中的功能。

谢谢你,我认为这很有道理,我会尝试你的建议。最后一个问题,我的原始功能需要引用外部DLL(例如AForge,Emgu),所以我猜我也需要将这些引用添加到类库项目中。我的问题是,一旦类库项目完成,我需要在WebSite项目中添加多少个DLL引用?是1个还是1个+我引用的所有外部DLL? - sidd
@sidd,网站中只需要一个,所有其他引用都应添加到Class Library项目中。 - Ahmed Lotfy

0

在服务器上运行控制台应用程序是不好的!在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";
}

我认为您会很高兴知道,我倾向于创建一个新的类库,并从网站引用它们,而不是在服务器上运行控制台应用程序。话虽如此,感谢您详细的回答! - sidd

0
如果您不需要运行控制台应用程序,只需使用在控制台应用程序中定义的方法,则应将这些方法重构到单独的类库中,并在Web应用程序中添加对该类库的引用。然后在网页中构建一个接口来调用相应的方法。
以下是MSDN提供的一份指南,展示了如何 创建带类库的Web应用程序项目

谢谢提供链接,看起来是我可以开始使用的东西! - sidd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接