【发布时间】:2013-12-09 16:17:20
【问题描述】:
我有一个 R# 插件和一个测试项目(不是 R# 测试项目,而是一个简单、普通的单元测试项目)。在插件的代码中,我从序列化的类型信息中进行了一些类型解析。在这种类型上是来自我的一个模型类的对象列表。类型的序列化如下所示:
"System.Collections.Generic.List`1[[Model.Foo, Model]], mscorlib"
我通过以下调用加载此类型(或者实际上是 Json.NET):
Assembly assembly = Assembly.LoadWithPartialName(assemblyName);
Type type = assembly.GetType(typeName);
在我的测试项目中,当我运行这段代码时,一切正常。 assemblyName 是“mscorlib”,第一行解析 mscorlib 程序集(作为 RuntimeAssembly 的一个实例)。 typeName 是“System.Collections.Generic.List`1[[Model.Foo, Model]]”,调用 GetType() 可以解析我的类型。
但是,当我运行 R# 插件时,GetType() 调用返回 null。直到我从测试项目执行时,一切看起来都像那条线。这两个项目都引用了“模型”程序集。当我尝试使用完全相同的机制仅解析“Model.Foo,Model”类型时,它在 R# 插件和测试项目中都有效。
当我允许 GetType() 调用抛出异常时,FileNotFound 异常(当然只在运行 R# 插件时抛出)告诉我找不到“模型”程序集。堆栈跟踪包含已扫描位置的列表。所有这些位置都在 VisualStudio 安装目录下。
如前所述,上面两行实际上是 Json.NET 的一部分。因此,我无法更改它们。但是,我在缩小此问题范围的同时完全消除了 Json.NET。仅上面两行,以及 assemblyName 和 typeName 的相应字符串值就足以重现问题。
谁能告诉我这种不同的行为来自哪里?或者更好:告诉我如何解决这个问题?
提前致谢! 最好的, 斯文
【问题讨论】:
标签: c# serialization reflection resharper json.net