Согласно .Net Framework Исходный код , GetExecutingAssembly использует следующий код для получения сборки.
public static Assembly GetExecutingAssembly()
{
StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller;
return RuntimeAssembly.GetExecutingAssembly(ref stackMark);
}
Используйте System.Reflection для вызова этого метода.
Type.GetType("System.Reflection.Assembly")
.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Where(f => f.Name.Contains("GetCallingAssembly"))
.First().Invoke(null, null)
Однако, если я использую рефлексию для вызова кода внутри Assembly.GetExecutingAssembly
, он всегда возвращает ноль.
Type.GetType("System.Reflection.RuntimeAssembly")
.GetMethods(BindingFlags.NonPublic | BindingFlags.Static)
.Where(f => f.Name.Contains("GetExecutingAssembly")).Skip(1)
// the second overload takes one argument
.First().Invoke(null, new object[] {
Type.GetType("System.Threading.StackCrawlMark")
.GetEnumValues().GetValue(1) // System.Threading.StackCrawlMark.LookForMyCaller
})
Есть ли какое-либо объяснение, почему он возвращает ноль?