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

时间:2019-07-13 19:41:42

标签: c# .net-core .net-assembly

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

TestHost --> TestProject --> MyLibrary

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

Assembly.GetExecutingAssembly()返回MyLibrary程序集

Assembly.GetCallingAssembly()返回MyLibrary程序集

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

是否有任何方法可以通过将程序集从TestProject传递到MyLibrary来显式地指定它?

编辑

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

  

System.Private.CoreLib,版本= 4.0.0.0,区域性=中性,

1 个答案:

答案 0 :(得分:0)

根据MSDN docs GetCallingAssembly:

  

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

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


示例: 假设您拥有TestProject-> TestLibrary

TestProject

public class TestClass
    {
        public void TestWrite()
        {
            new ConsoleWriter().Write("hello world");
        }
    }

TestLibrary

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());
        }
    }
}

输出

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