我有集成测试项目,该项目使用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,区域性=中性,
答案 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