从另一个项目运行.net核心项目

Bil*_*ail 12 c# asp.net-core

我有一个包含3个项目的解决方案。Project2需要Project1才能正常运行(Project2在Project1中称为Apis)。

Solution
|-- Project1
|   |-- Program.cs
|   |-- Startup.cs
|-- Project2
|   |-- Program.cs
|   |-- Startup.cs
|-- IntegrationTestProject
Run Code Online (Sandbox Code Playgroud)

我可以通过更改解决方案的属性来一起运行这两个项目,如下图所示,它运行良好:

在此处输入图片说明

我想要的是一种通过代码(从启动或Project2中的SomeService)从Project2运行Project1的方法,如果我在停止运行Project2时也可以停止Project1,那将很棒。

我尝试了这段代码,但它没有启动Project1:

  string[] x = { };
  Project1.Program.Main(x);
Run Code Online (Sandbox Code Playgroud)

编辑:

IntegrationTestProject用于测试Project2 Apis。所以我new TestServer()从Project2 创建了一个。

当我运行集成测试时,由于服务器(Project1)无法访问(测试运行时已关闭),一些API成功(仅依赖Project2的API)失败了(从Project1调用Apis的API)。

如果在运行Project1时运行集成测试,则所有测试均成功。

我尝试使用运行Project1的测试实例,new TestServer()并将其传递给Project2。它对某些Apis有用,而我遇到的另一个问题似乎是直到我运行Project1而不是它的测试实例时才解决。

因此,我唯一的解决方案是在启动集成测试时运行Project1。

我制作了一个.bat文件,该文件运行Project1(通过dotnet运行),然后启动集成测试(通过dotnet测试),并且工作正常。但是问题是从Visual Studio运行集成测试时,它没有运行Project1。

编辑2:

这是一个示例项目,演示了我面临的问题:https : //github.com/bilalseh/SampleSolution

1-如果单独运行Project2并调用(Get:“ / api / home”),它将返回结果。如果您调用(Get:“ / api / home / 5”),它将出现问题,因为此Api取决于Project1。

2-如果您打开Visual Studio并运行测试(2个测试)或通过“ dotnet test”从命令行运行这些测试,则1个测试将通过(测试:“ / api / home”),而一个测试将失败(测试:“ / api / home / 5“)。

3-如果您运行Project1,然后启动测试,则两者都会通过。

4-我在集成测试文件夹中创建了一个名为“使用临时服务器运行测试”的.bat文件。该文件将运行Project1,然后启动测试,然后停止Project1。如果运行此文件,则两个测试都将通过。

我想要的是找到一种从Project2或启动集成测试时启动Project1的方法。

Sya*_*r__ 8

您可以添加对要启动的项目的程序集的引用。

另一种方法是使用Process.Start()并放置可执行文件的路径以运行它

在要打开其他项目的项目上:

右键单击引用->添加引用->解决方案->检查要创建的项目->确定

如果编译器要求您添加其他引用(PresentationFramework,system.xaml ...),或者通过在“类Program”前面添加“ public”一词来使Project 2 Program.cs成为Public。

并将其添加到项目1按钮中...

private void button_Click(object sender, EventArgs e)
{
    Project_2 pb = new Project_2()
    Process.Start(pb.returnPath() + \\"Project_2.exe");
}
Run Code Online (Sandbox Code Playgroud)

编辑:在计算器作为我的搜索,你的问题,因为这类似一个


Krz*_*nek 5

看来您想采用微服务方式。因此,有两个原则:

1)您应该能够一次调试一个服务-如果您调试依赖于服务B的服务A,则制作一个模拟服务B。然后单独测试/调试服务B-如果所有部件都正常工作,则整个机器应该管用

2)如果要运行(而不仅仅是调试),请使用Docker / Kubernetes。他们将管理任何重启,崩溃,更新等。如果您想测试整个系统,请仍然运行docker deploy,然后在该平台上运行集成测试

每个微服务都是它自己的东西,对其他微服务没有任何实际依赖,因此没有共享数据库,也没有通过DLL等的交叉引用。

如果您觉得那太过分了,请不要将您的应用拆分为微服务,而只提供一项大型服务-它将更易于管理。至少直到粒度显示出其优点为止