gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:11:40 27 4
gpt4 key购买 nike

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

TestHost --> TestProject --> MyLibrary

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

Assembly.GetExecutingAssembly() 返回 MyLibrary 程序集

Assembly.GetCallingAssembly() 返回 MyLibrary 程序集

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

有什么方法可以通过将程序集从 TestProject 传递到 MyLibrary 来获得它而无需明确指定它?

编辑

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

System.Private.CoreLib, Version=4.0.0.0, Culture=neutral,

最佳答案

根据 MSDN docs获取调用程序集:

Returns the Assembly of the method that invoked the currently executing method

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


例子:假设你有 TestProject -> TestLibrary

测试项目

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

测试库

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

关于c# - .NET Core - 在集成测试中获取父程序集名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57022296/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com