c# - 'System.Int32' 类型的对象无法转换为 'System.Web.Security.Cryptography.Purpose' 类型

标签 c# exception-handling asp.net-4.5

每当我尝试构建时,我现在都会收到此错误。我刚刚安装了 Visual Studio 2012 和 .Net 4.5,但这个项目仍在 2010 上。

这是我遇到问题的代码行:

private static MethodInfo _encode;
public static string Encode(CookieProtection cookieProtection, byte[] buf, int count)
{
  return (string)_encode.Invoke(null, new object[] { cookieProtection, buf, count });
}

我收到一个 ArgumentException was unhandled by user code错误说,"Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'"我的开发环境没有任何变化,我的同事也没有遇到同样的问题,但他们也没有 VS2012。

我找到了 an article关于 Sitecore 有这个错误,但这是我看到它弹出的唯一地方。

他们说,“这是因为在 .NET 4.5 中,System.Web 中有一些新的命名空间”

他们的解决方案是:

  • 如果安装了 VS11,请将其卸载
  • 卸载 .NET 4.5
  • 重新安装 .NET 4

这似乎是一个荒谬的解决方案,因为 4.5 和 4 不能在同一台机器上。

在我尝试卸载并重新安装一堆东西之前,有谁知道可能导致此问题的原因以及更好的解决方案吗?

评论还说试试:</setting name="login.rememberlastloggedinusername" value="false" >但我也不想那样做。

最佳答案

正如@hvd 所暗示的,此代码使用反射来调用 Microsoft 在 .NET 4.5 中更改的内部方法。

幸运的是 .NET 4.0 引入了 System.Web.Security.MachineKey公开课Encode()Decode()方法完成与 CookieProtectionHelper 中的内部方法基本相同的事情。请注意,使用 CookieProtectionHelper.Encode() 加密的 cookie 将无法使用 MachineKey.Decode() 解密。

另请注意,在 .NET 4.5 中,这些方法已弃用,取而代之的是 Protect()Unprotect() .

关于c# - 'System.Int32' 类型的对象无法转换为 'System.Web.Security.Cryptography.Purpose' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11831655/

相关文章:

c# - 我可以在 C# 5 和 .Net 4.5 中做哪些我在 C# 4 和 .Net 4 中不能做的事情?

exception-handling - 我应该如何在 WebAPI 的 Controller 构造函数中处理异常?

c# - List<int> 使用 linq 过滤

java - 处理监听器抛出的java异常

c# - 需要一个完整的示例来在 ASP.NET Web Api 中使用 "ExceptionHandler"处理未处理的异常?

Java try-finally 里面的 try-catch 模式

c# - 如何通过 C# 将可空整数列的空值插入 SQL 表

c# - 将参数添加到 DbCommand 时出现异常

c# - ASP.NET Core 1.1 用户身份模拟

c# - Async WebClient 不是真正的异步?