C# GetEntryAssembly和GetExecutionGassembly之间的区别

C# GetEntryAssembly和GetExecutionGassembly之间的区别,c#,.net,.net-core,reflection,.net-assembly,C#,.net,.net Core,Reflection,.net Assembly,我已经读了很多年的文档,并试图弄明白它们之间的区别。我就是不明白这些定义是如何相互关联的。虽然我看到了两种不同的表述,但我无法理解其中隐含的区别。在我看来,这是一种potayto potahto情况,当我试图显示每个返回的Assemby对象的值时,屏幕上的相同内容强化了这种情况 当然,肯定有一些不同,只是我的直觉阻止我意识到它是什么。所以我做了一些,只是发现大部分的智慧都是关于获得路径的。明确针对他们之间的比较的唯一资源是一个 我可以问一个具体的例子,这两个方法返回的对象的内容不同吗?最好简单解

我已经读了很多年的文档,并试图弄明白它们之间的区别。我就是不明白这些定义是如何相互关联的。虽然我看到了两种不同的表述,但我无法理解其中隐含的区别。在我看来,这是一种potayto potahto情况,当我试图显示每个返回的Assemby对象的值时,屏幕上的相同内容强化了这种情况

当然,肯定有一些不同,只是我的直觉阻止我意识到它是什么。所以我做了一些,只是发现大部分的智慧都是关于获得路径的。明确针对他们之间的比较的唯一资源是一个


我可以问一个具体的例子,这两个方法返回的对象的内容不同吗?最好简单解释一下原因。

假设您有一个控制台项目
MyConsoleProject
,它引用了库项目
MyLibrary


MyConsoleProject
内部,条目程序集和执行程序集将是相同的。但是在
MyLibrary
内部,ExecutingAssembly将引用库项目,而不是控制台项目。

假设您有一个控制台项目
MyConsoleProject
引用库项目
MyLibrary


MyConsoleProject
内部,条目程序集和执行程序集将是相同的。但是在
MyLibrary
中,ExecutionGassembly将引用库项目,而不是控制台项目。

GetExecutionGassembly
获取包含当前正在执行的代码的程序集


GetEntryAssembly
返回作为默认应用程序域中的进程可执行文件的程序集,或由ExecuteAssembly执行的第一个可执行文件(字符串)。从非托管代码调用时可以返回null


当从非托管应用程序加载托管程序集时,
GetEntryAssembly
方法可以返回null。例如,如果非托管应用程序创建用C#编写的COM组件的实例,则从C#组件调用
GetEntryAssembly
方法将返回null,因为流程的入口点是非托管代码,而不是托管程序集

参考:


GetExecutionGassembly
获取包含当前正在执行的代码的程序集


GetEntryAssembly
返回作为默认应用程序域中的进程可执行文件的程序集,或由ExecuteAssembly执行的第一个可执行文件(字符串)。从非托管代码调用时可以返回null


当从非托管应用程序加载托管程序集时,
GetEntryAssembly
方法可以返回null。例如,如果非托管应用程序创建用C#编写的COM组件的实例,则从C#组件调用
GetEntryAssembly
方法将返回null,因为流程的入口点是非托管代码,而不是托管程序集

参考:


GetEntryAssembly
将始终返回第一次执行的程序集的名称(通常是可执行文件的名称),
getExecutionGassembly
返回包含实际执行的代码的程序集的名称。请参阅和。
GetEntryAssembly
将始终返回第一次执行的程序集的名称(通常是可执行名称),
getExecutionGassembly
返回包含实际正在执行的代码的程序集的名称。请参见和。啊,因此对于web项目(通常由带有WebApi的单个项目组成),通常没有区别,对吗?在我知道项目不会与外部库交互的情况下,哪一个是这两个库中最直观的第一选择?在实践中,它们将产生相同的结果,但我感觉其中一个htem是主要选择,除非另一个是必需的。你觉得呢?我想,一旦你知道了它们之间的区别,你就会相应地使用它们。也许我还不清楚我的后续行动。多亏了你的回答,我现在明白了他们之间的区别。但是,我想听听您的主观意见,在已知的应用范围等情况下,当两者都可以互换使用时,您最期待的是哪一种。大多数时候,我发现
GetEntryAssembly
是首选,然后在特定情况下选择
GetExecutingAssembly
Ah,因此对于web项目(通常由一个带有WebApi的项目组成)来说,通常没有区别,对吗?在我知道项目不会与外部库交互的情况下,哪一个是这两个库中最直观的第一选择?在实践中,它们将产生相同的结果,但我感觉其中一个htem是主要选择,除非另一个是必需的。你觉得呢?我想,一旦你知道了它们之间的区别,你就会相应地使用它们。也许我还不清楚我的后续行动。多亏了你的回答,我现在明白了他们之间的区别。但是,我想听听您的主观意见,在已知的应用范围等情况下,当两者都可以互换使用时,您最期待的是哪一种。大多数时候,我发现
GetEntryAssembly
是首选,然后在特定情况下,选择
GetExecutingAssembly
,至于我对另一个答案的评论,在一个执行程序集始终与入口程序集一致的应用程序中,您直觉上希望看到哪一个?例如,在较小的应用程序中。现在,我确实明白他们在做什么,以及他们之间的区别。但我想听听其他人的意见,哪一个是默认的