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

C# 类型为'的对象;System.Int32';无法转换为类型';System.Web.Security.Cryptography.Purpose';,c#,exception-handling,asp.net-4.5,C#,Exception Handling,Asp.net 4.5,现在,每当我尝试构建时,都会出现此错误。我刚刚安装了VisualStudio2012和.NET4.5,但这个项目仍在2010年 以下是我遇到问题的代码行: private static MethodInfo _encode; public static string Encode(CookieProtection cookieProtection, byte[] buf, int count) { return (string)_encode.Invoke(null, new object[

现在,每当我尝试构建时,都会出现此错误。我刚刚安装了VisualStudio2012和.NET4.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 });
}
我收到一个用户代码未处理的
参数异常,错误是,
“类型为'System.Int32'的对象无法转换为'System.Web.Security.Cryptography.Purpose'类型”
我的开发环境没有任何变化,我的同事也没有同样的问题,但他们也没有VS2012

我发现Sitecore有此错误,但这是我唯一看到它弹出的地方

他们说,“这是因为在.NET4.5中,System.Web中有一些新的名称空间”

他们的解决办法是:

  • 如果已安装VS11,请卸载它
  • 卸载.NET4.5
  • 重新安装.NET4
这似乎是一个荒谬的解决方案,4.5和4不能在同一台机器上

在我尝试卸载和重新安装一堆东西之前,有没有人知道是什么原因导致了这种情况以及有没有更好的解决方案

一条评论还说要尝试:
,但我也不想这样做。

你是从哪里得到的

这依赖于.NET框架的内部实现细节,微软从未承诺过这些细节将保持不变。因此,是的,.NET Framework的就地升级很可能会使此类代码停止工作。这不是.NET4.5中的错误。这是你的代码中的一个bug,用于依赖你不能依赖的东西


为了解决这个问题,停止使用这种方法。如果有一个公共API可以满足您的需要,请使用它。如果没有,请自己实现。

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

幸运的是.NET4.0引入了带有public和methods的类,这些类实现的功能与
CookieProtectionHelper
中的内部方法基本相同。请注意,使用
CookieProtectionHelper.Encode()加密的Cookie将无法使用
MachineKey.Decode()解密


还要注意,在.NET4.5中,这些方法被弃用,取而代之的是and

将web.config中的值更改为false:

<setting name=”Login.RememberLastLoggedInUserName” value=”false” /> 


(from:)

如果您在使用CMS软件时看到此错误,则以下是他们的-

71233如果您安装了8.6.1站点并在中启用了cookie加密 web.config(), 安装Microsoft.NET Framework 4.5后,您看到以下错误:

是固定的


正如其他答案中提到的,一种解决方案是回滚到.NETFramework4.0。Ektron在这种特殊情况下的其他解决方案是禁用cookie加密,或升级到8.7。

很难真正了解您提供的内容到底发生了什么。i、 e.您发布的内容中没有实际使用该类型的内容。您试图调用什么方法?抱歉,我已经添加了调用此方法的位置。这些信息够了吗?我看不出你的编辑与你最初发布并说有“问题”的代码有什么关系。您使用的是什么
HttpSecureCookie
类?我从不使用类型,这就是为什么我感到困惑的原因。被调用的方法是MethodInfo.Invoke()。这段代码在我的TFS中已经有一年多没有被涉及了,它突然停止了工作。编辑是一个坏例子,所以我将删除它。它击中了HttpSecureCooke类中我的原始代码,并认为它可能很有用。您的代码片段缺少一个关键细节。此变量设置为什么<代码>私有静态方法信息_编码。。。哦,等等,抓挠那个。。。你说你有一个构建错误,不是运行时错误?我不知道代码来自哪里。。。在我开始为这家公司工作之前,它就已经在这里了。不管怎样,如果你的
\u encode
就是这样设置的,你真的需要放弃它。你的代码在官方发布的.NET版本中不会失败,但很快就会失败。它说新版本会在哪里贬低这一点?@JCisar发布候选版本已经失败,这一事实引发了你的疑问?正式发布只是时间问题。@JCisar-使用System.Web.Security.MachineKey类上的静态API。这些是在ASP.NET中执行加密的受支持方式。内部API(比如CookieProtectionHelper,您是通过反射访问的)没有文档记录且不受支持,可以随时删除,这就是这里发生的情况。感谢您发布此帖子!你给了我一个很好的解决方案,我可以用什么来代替我现有的。我要试试这些!用MachineKey.Encode()和Decode()替换CookieProtectionHelper对我很有效。我正在使用4.0,但最近安装了4.5,这导致了这种情况的发生。
<setting name=”Login.RememberLastLoggedInUserName” value=”false” /> 
 Server Error in '/' Application. 
 Object of type 'System.Int32' cannot be converted to type System.Web.Security.Cryptography.Purpose'. This