从另一个项目启动项目

时间:2014-11-26 17:58:38

标签: c# .net wpf visual-studio devserver

我正在尝试向可以在本地运行的用户提供WPF应用程序。

我目前有一个WebAPI项目,用作正常修改数据库中数据的API。这完全按预期工作。

我有一个类库,我已经编写了一些内部类,这些类是运行我将提供给用户的WPF项目所必需的 - 引用了这个类包。

我想创建这个类库,以便给出它们的WPF项目具有最小的可编辑代码,它们可能会改变并破坏应用程序。这一切都很好并且设置好了。

我创建的WPF项目为用户提供了一个用户界面,用于查看和修改本地数据库中的数据(随项目提供)。向用户提供此项目的目的是,他们可以在项目中修改或创建可用于扩展我们的解决方案的新类。

我有本地数据库,WPF项目和类库都已设置并按预期工作,但是,我想包含WebAPI项目,以便当它们在本地运行WPF应用程序时,也会运行WebAPI的实例本地在后台 - 在.NET本地Web服务器上,就好像我在WebAPI项目中运行了一样。

这个问题 ,我宁愿不只是给他们整个WebAPI项目来在WPF解决方案中加载和运行自己,并且想要一个实例当WPF应用程序开始时,WebAPI才开始,以便它们可以通过WPF接口操作数据库数据,或者通过从其他源向本地运行的API发送请求。

当WPF应用程序启动而不在WPF解决方案中包含WebAPI项目时,是否可以启动WebAPI的实例(就像我在WebAPI项目中按F5一样)?

我想在WPF项目中简单地包含WebApi的DLL,并在WPF应用程序启动时在本地.NET Web服务器中启动它的实例。这可能吗?您可以从另一个引用或包含所述DLL的独立项目中将构建的DLL启动到本地Web服务器吗?

我已经研究过Cassini和其他一些选项,例如将其转换为EXE,但我认为它们比我需要的要复杂得多,如果有更简单的方法,我不想开始改造代码我还没有在网上偶然发现。

2 个答案:

答案 0 :(得分:1)

您可以向他们提供已发布的WebAPI文件,并让他们在本地IIS中设置实例,然后让WPF项目引用该本地实例。但是,只有当用户量相对较低时,这才可行。

答案 1 :(得分:0)

对于其他想知道如何操作的人,使用editas的想法,我将已发布的文件放入一个文件夹中,该文件夹将包含在提供给用户的包中,并在WPF应用程序启动时调用引用的类库使用我写的方法初始化API:InitialiseAPI()

此方法通过调用EXE来工作,该EXE在将“已发布”文件附加到实例的用户计算机上静默启动IIS Express实例。这个工作完美,我还创建了应用程序退出方法来在退出时销毁IIS实例,因此当他们重新启动应用程序时,它不会抛出一个正在使用的端口异常。