在.NET Core中可用的Assembly.GetExecutingAssembly()?

时间:2017-01-30 19:31:46

标签: asp.net-core

需要在我的.NET Core应用程序中嵌入一个json文件作为测试源。这篇文章的作者http://codeopinion.com/asp-net-core-embedded-resource/提供了包含使用var assembly = Assembly.GetExecutingAssembly();的示例代码。但是,当我尝试这样做时,我收到错误:Cannot resolve symbol ‘GetExecutingAssembly’ and ‘Assembly’ does not contain a definition for ‘GetExecuringAssembly’

3 个答案:

答案 0 :(得分:28)

如果您的目标是.NET Standard 1.5或更高版本,则可以调用以下任何一种方法:

System.Reflection.Assembly.GetExecutingAssembly();
System.Reflection.Assembly.GetEntryAssembly();
System.Reflection.Assembly.GetCallingAssembly();

如果定位早期版本的.NET Standard,那么typeof(SomeClass).GetTypeInfo().Assembly方法是唯一的方法。

答案 1 :(得分:23)

1.5版之前的.NET Standard中没有“静态”程序集类。相反,你必须做类似

的事情
typeof(<AClassHere>).GetTypeInfo().Assembly

应该在要加载的程序集中的类/类型的名称替换。

答案 2 :(得分:4)

不,它在.NET Core 1.0 / 1.1中不可用。

但是,如果我没记错的话,它会回到.NET Core 2.0和将要在今年晚些时候发布的netstandard2.0,它将具有更大的API表面并增加与写入的库的兼容性.NET&gt; = 4.5,可以更轻松地将它们移植到.NETStandard 2.0 / 2.1。

但是许多API实现都依赖于平台。意思是,您可以在任何地方调用SomeAPI.GetSomething(),但如果在.NET Core上运行,它可能会抛出PlatformNotSupportedException

但是大多数关于程序集扫描和发现的API应该回到.NET Core / Standard 2.0中。由于.NET Core中没有AppDomain,并且应该使用进程隔离,因此AppDomain周围的内容仍然会丢失。