9

每当我尝试构建时,我都会收到此错误。我刚刚安装了 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。

我发现一篇关于 Sitecore 出现此错误的文章,但这是我看到它弹出的唯一地方。

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

他们的解决方案是:

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

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

在我尝试卸载并重新安装一堆东西之前,有谁知道可能导致这种情况的原因以及任何更好的解决方案?

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

4

4 回答 4

9

正如@hvd 所暗示的,这段代码使用反射来调用微软在.NET 4.5 中改变的内部方法。

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

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

于 2012-08-21T02:47:01.073 回答
7

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

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

(来自:http ://truncatedcodr.wordpress.com/2012/06/20/fix-sitecore-and-net-framework-4-5/ )

于 2012-10-30T17:32:45.230 回答
3

你是从这里得到的吗?

_encode = cookieProtectionHelper.GetMethod(
    "Encode", BindingFlags.NonPublic | BindingFlags.Static);

这依赖于 MS 从未承诺将保持不变的 .NET Framework 的内部实现细节。所以是的,.NET Framework 的就地升级很可能会使此类代码停止工作。这不是 .NET 4.5 中的错误。这是你的代码中的一个错误,它依赖于你无法依赖的东西。

要解决它,请停止使用该方法。如果有一个公共 API 可以满足您的需求,请使用它。如果没有,请自行实施。

于 2012-08-06T16:40:08.880 回答
1

如果您在使用 CMS 软件Ektron时看到此错误,以下是他们的8.7 发行说明-

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

 Server Error in '/' Application. 
 Object of type 'System.Int32' cannot be converted to type System.Web.Security.Cryptography.Purpose'. This

是固定的。

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

于 2013-05-15T04:31:28.383 回答