我试图让Mono3.4.0使用一些Microsoft组件。我已经开始在Windows上进行测试,但是当我的应用程序处理HTTP请求时,我会得到以下异常:
System.TypeLoadException:无法从程序集'Microsoft.Owin、Version=2.1.0.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35‘加载'Microsoft.Owin.Security.AuthenticateResult’类型。
正在使用Visual作为标准.NET程序集编译应用程序,并期望它在Mono运行时上运行。
我将Microsoft.Owin NuGet包添加到控制台应用程序中,并设法将问题再现到以下代码中:
class Program
{
static void Main(string[] args)
{
var instance = new AuthenticateResult(
null,
new AuthenticationProperties(),
new AuthenticationDescription());
Console.WriteLine(instance.GetType().AssemblyQualifiedName);
}
}在.NET中运行此操作,应用程序将正常启动并输出类型信息。如果通过Mono运行,应用程序将输出异常并失败。
此外,这段代码在.NET和Mono中都可以工作:
class Program
{
static void Main(string[] args)
{
var type = typeof(AuthenticateResult);
Console.WriteLine(type.AssemblyQualifiedName);
}
}我用Microsoft.Owin程序集中的许多类型进行了测试,得到了类似的结果。如果我在需要之前使用typeof操作符加载类型,Mono不会引发异常,而是抛出一个异常试图加载另一个类型(可能只是下一个代码所需的类型)。
为什么我在Mono跑步时会有这种奇怪的行为?我是否必须在命令行中指定一些东西来加载程序集,就像我从.NET CLR中期望的那样?有什么我可以做的,以获得更多的信息,为什么类型未能加载?
发布于 2014-06-24 21:14:12
看起来,类型加载错误是由代码中引用的类型使用的类型之一引起的,而不是实际使用的类型。
如果在运行程序之前运行set MONO_LOG_LEVEL=debug,您将在输出中看到以下内容:
Mono:无法加载类System.Security.Claims.ClaimsIdentity,在mscorlib、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089中使用
通过对单一状态页进行检查,我们可以看到还没有在Mono中实现任何System.Security.Claims命名空间。
https://stackoverflow.com/questions/24375532
复制相似问题