2012-08-06 24 views
9

ビルドしようとすると、このエラーが発生します。タイプ 'System.Int32'のオブジェクトは、 'System.Web.Security.Cryptography.Purpose'タイプに変換できません。

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

私は、"Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'"を言っArgumentException was unhandled by user codeエラーが表示されます。私はただのVisual Studio 2012と.NET 4.5をインストールしたのですが、このプロジェクトはここ

2010年に残っている私は問題を抱えていたコードの行があります私の開発環境では何も変わっておらず、私の同僚は同じ問題を抱えていませんが、VS2012も持っていません。

このエラーが発生したSitecoreについてはan articleが見つかりましたが、これは私がポップアップした唯一の場所です。そこ

彼らは彼らのソリューションがにある

「.NET 4.5でのSystem.Webでいくつかの新しい名前空間があるので、これはある」、と言う:あなたはそれが をインストールしている場合

  • アンインストールVS11
  • をアンインストールし、.NET 4.5
  • を再インストールし、.NET 4

このばかげソリューションtのように見えます帽子4.5と4は同じ機械に置くことはできません。

私がアンインストールして再インストールしようとする前に、これとより良い解決策の原因を知っている人はいますか?

コメントも試してみると:</setting name="login.rememberlastloggedinusername" value="false" >しかし、私はそれもしたくないです。

+0

あなたが提供したことで何が起こっているのか本当に知るのは難しいです。つまり、実際にタイプPurposeを使用して投稿したものはありません。どのような方法で呼び出しようとしていますか? –

+0

申し訳ありませんが、私はこれに電話をかけている場所を追加しました。十分な情報ですか? – JCisar

+0

あなたの編集内容が最初に投稿したコードにどのように関連しているのかわかりません。どのような 'HttpSecureCookie'クラスを使用していますか? –

答えて

9

このコードでは、リフレクションを使用して、Microsoftが.NET 4.5で変更した内部メソッドを呼び出す方法を示しています。

幸い.NET 4.0は、基本的にCookieProtectionHelperにおける内部メソッドと同じことを達成する公共Encode()Decode()方法でSystem.Web.Security.MachineKeyクラスを導入しました。 CookieProtectionHelper.Encode()で暗号化されたCookieは、MachineKey.Decode()で復号化することはできません。

また、.NET 4.5では、これらのメソッドには、Protect()およびUnprotect()が推奨されています。

+1

このポストをありがとう!あなたは私が持っているものの代わりに私が使うことができるものに対して、私に素晴らしい解決策を教えてくれました。私はこれらを試してみよう! – JCisar

+1

CookieProtectionHelperをMachineKey.Encode()とDecode()に置き換えてくれました。私は4.0を使用していますが、最近これをインストールした4.5がインストールされています。 – Induster

3

hereから取得しましたか?

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

これは、MSが変わらないと約束したことがないの.NET Frameworkの内部実装の詳細に依存しています。したがって、.NET Frameworkのインプレースアップグレードにより、こうしたコードが正常に機能しなくなる可能性があります。これは.NET 4.5のバグではありません。それはあなたが信頼できないものに頼るためのコードです。

それを解決するには、その方法の使用をやめてください。あなたが望むものを実行するパブリックAPIがある場合は、それを使用します。存在しない場合は、自分で実装します。

+0

コードがどこから来たのか分かりません。私はこの会社で働く前にここにいました。 – JCisar

+0

どちらの場合でも、 '_encode'が設定されていれば、本当にそれを捨てる必要があります。公式にリリースされた.NETバージョンでは、あなたのコードは失敗しませんが、すぐになります。 – hvd

+0

新しいバージョンではこれが減価償却されると言われていますか? – JCisar

1

あなたはCMSソフトウェアEktronを使用しながら、このエラーが表示された場合、次は自分の8.7 release notesである -

71233—If you installed an 8.6.1 site and enabled cookie encryption in web.config(), then installed Microsoft .NET Framework 4.5, you saw this error:

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

is fixed.

他の答えで述べたように、1つの解決策は.Net framewにロールバックすることですork 4.0。 Ektronのこの特定のケースでの他の答えは、クッキーの暗号化を無効にするか、8.7にアップグレードすることです。

+0

ありがとうSpongeboy!あなたは私のために一日の仕事を保存しました。 – eastboundr

関連する問題