首页 > 解决方案 > VSTest 中的 GetEntryAssembly

问题描述

Assembly.GetEntryAssembly在 .NET Core中,在简单的 .NET Core API 中执行和在使用 VSTest 运行测试时执行它是有区别的。

这些是我的包裹:

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.8.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.3.2" />
<PackageReference Include="MSTest.TestFramework" Version="1.3.2" />

以下是我为 API URL 运行测试的方式:

    [TestMethod]
    public async Task SomeTest()
    {
        var builder = new WebHostBuilder().UseStartup<Startup>();
        var testServer = new TestServer(builder);

        var client = testServer.CreateClient();
        var response = await client.GetAsync("someUrl");
        var content = await response.Content.ReadAsStringAsync();
    }

Assembly.GetEntryAssembly简单的 .NET Core API 中调用时,它会返回 API 程序集。当Assembly.GetEntryAssembly在上面编写的测试中调用时,它会返回测试包。

我不确定这是否是设计使然,但我需要一种方法让它们返回相同的东西:API 程序集。我Assembly.GetEntryAssembly用来迭代 API 中的所有控制器。我无法通过参数传递程序集。也欢迎替代品。

标签: c#.net-core

解决方案


您所描述的行为正是Assembly.GetEntryAssembly()应该做的:参见Assembly.GetEntryAssembly Method

改用Assembly.GetExecutingAssembly():参见Assembly.GetExecutingAssembly Method

或者,您可以通过包含在该Assembly中的Type获取您的 API Assembly

typeof(MyNamespace.MyClass).Assembly

在我看来,Type.Assembly更具表现力的解决方案是:参见Type.Assembly Property


推荐阅读