C# 为什么Assembly.getExecutionGassembly()在NuGet包中返回不同的结果?

C# 为什么Assembly.getExecutionGassembly()在NuGet包中返回不同的结果?,c#,reflection,nuget,.net-assembly,C#,Reflection,Nuget,.net Assembly,我不熟悉创建NuGet软件包,并在各种环境中运行了以下代码段: // ///尝试在执行程序集中按名称查找类型,然后 ///在引用的程序集中。 /// ///要查找的类型的名称(也可以是完整名称或程序集限定名称)。 ///使用给定名称找到的类型(如果找不到,则为null)。 公共静态类型FindType(字符串类型名) { 如果(typeName==null)抛出新的ArgumentNullException(nameof(typeName)); //用于在程序集中查找类型的帮助器方法 类型查找

我不熟悉创建NuGet软件包,并在各种环境中运行了以下代码段:

//
///尝试在执行程序集中按名称查找类型,然后
///在引用的程序集中。
/// 
///要查找的类型的名称(也可以是完整名称或程序集限定名称)。
///使用给定名称找到的类型(如果找不到,则为null)。
公共静态类型FindType(字符串类型名)
{
如果(typeName==null)抛出新的ArgumentNullException(nameof(typeName));
//用于在程序集中查找类型的帮助器方法
类型查找器(程序集ass)=>ass?.GetTypes().FirstOrDefault(类型=>
typeName.In(type.Name、type.FullName、type.AssemblyQualifiedName)
);
//获取当前程序集
var executingAssembly=Assembly.GetExecutingAssembly();
//检查类型是否在当前程序集中
var targetType=Finder(可执行);
//检查所有引用的程序集
foreach(executingAssembly.getReferencedAssemblys()中的变量assName)
{
//如果找到类型,请返回它
if(targetType!=null)
返回目标类型;
//检查类型是否在部件内部
targetType=Finder(Assembly.Load(assName));
}
return null;//找不到类型,返回null
}
如果我将其作为本地函数或通过引用的项目运行,它可以正常工作,但是当我创建NuGet包并使用NuGet包内的方法实现调用该方法时,它返回null

方法
Assembly.getExecutionGassembly
声明它返回
包含当前正在执行的代码的程序集
,但是当从NuGet包运行它时,我会得到不同的结果


如果我将该方法打包到NuGet包中,如何才能从该方法中获得正确的输出?

请尝试
AppDomain.CurrentDomain.GetAssemblys()
是否有原因使您不遵循@Damien\u the\u中给出的建议?不信者是的,如果需要按名称获取类型,我希望它是一个实用方法。我很少使用反射,而且
类型。FindType(string typeName)
感觉它没有涵盖那么多情况。@JohanP谢谢!这起作用了。我已经检查了执行程序集返回的内容。它返回NuGet包项目的程序集。我不知道这是否是有意的,但它确实令人困惑。有没有办法获得实际执行的程序集?也许通过AppDomain?我没有在该类的成员中找到任何正在执行的指标。。。另外,我刚刚试过使用
Assembly.GetCallingAssembly()
,它的工作原理与我预期的一样——它返回从NuGet包调用该方法的程序集。