.NET Core - 在集成测试中获取父程序集名称

TjD*_*haw 5 c# .net-assembly .net-core

我有使用Microsoft.AspNetCore.TestHost包托管在内存中的集成测试项目。然后我有用于这些测试的库。我想我的库中获取测试项目的 程序集名称。所以结构看起来像这样。

TestHost --> TestProject --> MyLibrary
Run Code Online (Sandbox Code Playgroud)

我所做的是尝试调用以下方法:

Assembly.GetExecutingAssembly() 返回 MyLibrary 程序集

Assembly.GetCallingAssembly() 返回 MyLibrary 程序集

Assembly.GetEntryAssembly() 返回 TestHost 程序集。

通过将程序集从 TestProject 传递到 MyLibrary ,有什么方法可以在不明确指定的情况下获得它?

编辑

正如@svoychik 所建议的那样,我也尝试Assembly.GetCallingAssembly()直接从调用的方法中TestProject调用,MyLibrary但这会返回:

System.Private.CoreLib,版本=4.0.0.0,文化=中性,

svo*_*hik 0

根据MSDN 文档GetCallingAssembly:

返回调用当前执行方法的方法的程序集

因此,您只能在直接调用的方法中检索调用程序集 TestProject。如果代码的另一部分需要调用汇编,可以将其保存在变量中以便稍后使用该值


示例:假设您有 TestProject -> TestLibrary

测试项目

public class TestClass
    {
        public void TestWrite()
        {
            new ConsoleWriter().Write("hello world");
        }
    }
Run Code Online (Sandbox Code Playgroud)

测试库

namespace TestLibrary
{
    public class ConsoleWriter
    {
        public void Write(string s)
        {
            Console.WriteLine(s);
            Console.WriteLine(System.Reflection.Assembly.GetCallingAssembly().GetName());
            Test();
        }

        private void Test()
        {
            Console.WriteLine("In test method");
            Console.WriteLine(System.Reflection.Assembly.GetCallingAssembly().GetName());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

hello world
TestProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
In test method
TestLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Run Code Online (Sandbox Code Playgroud)