- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对生产系统上发生的 NullReferenceException
进行故障排除。如果堆栈跟踪中的行号是可信的,那么它似乎表明 AppDomain.CreateInstanceAndUnwrap
返回了 null:
this.jobRunner =
(JobRunner)this.appDomain.CreateInstanceAndUnwrap(assemblyName, typeName);
// ...
try
{
this.jobRunner.Run(this.job); // <== NullReferenceException occurs here
}
然而,MSDN Library没有具体说 null 是一个可能的返回值:
Return Value
Type: System.Object
An instance of the object specified by typeName.
我的问题: AppDomain.CreateInstanceAndUnwrap
可以合法地返回 null 吗?如果是这样,那意味着什么?
最佳答案
是的,AppDomain.CreateInstanceAndUnwrap
可以合法地返回 null。
下面是该方法的反射代码(使用 .NET Reflector):
[SecuritySafeCritical]
public object CreateInstanceAndUnwrap(string assemblyName, string typeName)
{
ObjectHandle handle = this.CreateInstance(assemblyName, typeName);
if (handle == null)
{
return null;
}
return handle.Unwrap();
}
我们更深入地了解:
[SecuritySafeCritical]
public ObjectHandle CreateInstance(string assemblyName, string typeName)
{
if (this == null)
{
throw new NullReferenceException();
}
if (assemblyName == null)
{
throw new ArgumentNullException("assemblyName");
}
return Activator.CreateInstance(assemblyName, typeName);
}
所以真正的问题是:Activator.CreateInstance
能否合法地返回 null。答案是YES,它可以在特定条件下返回null。我发现的一个示例是创建可为 null 的类型(请参阅 this SO question ),但我确信还有其他示例。
关于c# - AppDomain.CreateInstanceAndUnwrap 能否返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17663097/
我正在尝试在我的控制台应用程序的新 AppDomain 中加载程序集 A,该应用程序具有与默认域相同的基本目录和 RelativePath。 当我使用 CreateInstanceFrom 从 A 创
我有一个属性,我希望它的实例位于其他域中。 public ModuleLoader Loader { get {
我正在尝试对生产系统上发生的 NullReferenceException 进行故障排除。如果堆栈跟踪中的行号是可信的,那么它似乎表明 AppDomain.CreateInstanceAndUnwra
我有这个代码(简化) internal class Worker : MarshalByRefObject { public void DoWork() { } } internal
尝试在分离的应用程序域中获取类的实例时出现此错误。这是代码: string assemblyName = Assembly.GetExecutingAssembly().FullName; strin
简介 我正在尝试加载一些程序集并从中获取类型...程序集的路径是 bin/Plugin1 我也在尝试为他们创建一个应用程序域并将它们加载到那里。基本步骤是: 1。创建域: domain = AppDo
在 AppDomain.CreateInstanceAndUnwrap 方法的 MSDN 文档中,它声明为注释 If you make an early-bound call to a method
我是一名优秀的程序员,十分优秀!