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,文化=中性,
根据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)
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |