假设我在C# 9中编写了一个简单的脚本,如下所示:
using System;
using System.IO;
// What to put in the ???
var exeFolder = Path.GetDirectoryName(typeof(???).Assembly.Location);在此之前,对于完整的程序,我们可以使用Main类作为“指示器”类。this和this.GetType()是不可用的,因为技术上它在静态方法中。我现在怎么弄到?
我在输入这个问题时想到的一个解决方法是Assembly.GetCallingAssembly()
var exeFolder = Path.GetDirectoryName(Assembly.GetCallingAssembly().Location);它适用于我的情况,但我只能获得运行代码的Assembly,而不是运行代码的TypeInfo。
发布于 2020-12-06 06:03:40
我建议从正在执行的方法(Main)开始:
TypeInfo result = MethodBase
.GetCurrentMethod() // Executing method (e.g. Main)
.DeclaringType // Type where it's declared (e.g. Program)
.GetTypeInfo(); 如果您想要Type,而不是TypeInfo删除最后一个方法:
Type result = MethodBase
.GetCurrentMethod() // Executing method (e.g. Main)
.DeclaringType; // Type where it's declared (e.g. Program)发布于 2020-12-06 05:01:32
还可以使用GetEntryAssembly获取程序集。
一旦有了代码所在的程序集,就可以得到它的EntryPoint,这是编译器生成的"Main“方法。然后您可以执行DeclaringType来获取Type
Console.WriteLine(Assembly.GetEntryAssembly().EntryPoint.DeclaringType);即使您不在顶层,上面的代码也会得到编译器生成的"Program“类。
https://stackoverflow.com/questions/65164165
复制相似问题