2012-08-06 18 views
9

Tôi nhận được lỗi này ngay bây giờ bất cứ khi nào tôi cố gắng xây dựng. Tôi chỉ cần cài đặt Visual Studio 2012 và .NET 4.5, nhưng dự án này vẫn còn nằm trên 2010.Đối tượng thuộc loại 'System.Int32' không thể chuyển đổi thành kiểu 'System.Web.Security.Cryptography.Purpose'

Đây là dòng mã Tôi gặp vấn đề với:

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

tôi nhận được một lỗi ArgumentException was unhandled by user code nói, "Object of type 'System.Int32' cannot be converted to type 'System.Web.Security.Cryptography.Purpose'" Không có gì thay đổi trong môi trường dev của tôi và đồng nghiệp của tôi không có cùng vấn đề, nhưng họ cũng không có VS2012.

Tôi đã tìm thấy an article về Sitecore gặp lỗi này, nhưng đây là nơi duy nhất tôi thấy nó bật lên.

Ở đó, họ nói, "Đây là bởi vì trong .NET 4.5 có một số không gian tên mới trong System.Web"

giải pháp của họ là:

  • Uninstall VS11 nếu bạn đã cài đặt
  • Uninstall .NET 4.5
  • Cài đặt lại NET 4

này có vẻ giống như một giải pháp t lố bịch mũ 4.5 và 4 không thể trên cùng một máy.

Có ai biết điều gì có thể gây ra điều này và bất kỳ giải pháp nào tốt hơn trước khi tôi cố gắng bỏ cài đặt và cài đặt lại một loạt nội dung không?

Một nhận xét cũng nói là thử: </setting name="login.rememberlastloggedinusername" value="false" > nhưng tôi cũng không muốn làm điều đó.

+0

Khó thực sự biết điều gì đang xảy ra với những gì bạn đã cung cấp. tức là không có gì bạn đã đăng thực sự sử dụng loại Mục đích. Bạn đang cố gắng gọi phương thức nào? –

+0

Xin lỗi, tôi đã thêm nơi tôi đang thực hiện cuộc gọi đến điều này. Có đủ thông tin không? – JCisar

+0

Tôi không thấy cách chỉnh sửa của bạn liên quan đến mã bạn đã đăng ban đầu và cho biết có "vấn đề". Lớp 'HttpSecureCookie' bạn đang sử dụng là gì? –

Trả lời

9

Khi @hvd ám chỉ đến, mã này đang sử dụng sự phản chiếu để gọi các phương thức nội bộ mà Microsoft đã thay đổi trong .NET 4.5.

May mắn thay .NET 4.0 đã giới thiệu lớp System.Web.Security.MachineKey với các phương thức công khai Encode()Decode() hoàn thành về cơ bản giống như phương pháp nội bộ trong CookieProtectionHelper. Lưu ý rằng các cookie đã được mã hóa với CookieProtectionHelper.Encode() sẽ không thể được giải mã bằng MachineKey.Decode().

Cũng lưu ý rằng trong .NET 4.5, các phương pháp này không còn được dùng để ủng hộ Protect()Unprotect().

+1

Cảm ơn bạn đã đăng bài này! Bạn đã cho tôi một giải pháp tuyệt vời cho những gì tôi có thể sử dụng thay vì những gì tôi có. Tôi sẽ thử những thứ này! – JCisar

+1

Thay thế CookieProtectionHelper bằng MachineKey.Encode() và Decode() làm việc cho tôi. Tôi đang sử dụng 4,0 nhưng gần đây đã cài đặt 4.5 gây ra điều này xảy ra. – Induster

3

Bạn có nhận được điều đó từ here không?

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

Điều này phụ thuộc vào chi tiết triển khai nội bộ của Khuôn khổ .NET mà MS chưa bao giờ hứa sẽ không thay đổi. Vì vậy, có, một nâng cấp tại chỗ của .NET Framework có thể rất tốt làm cho mã ngừng hoạt động. Đó không phải là lỗi trong .NET 4.5. Đó là một lỗi trong mã của bạn - để dựa vào những thứ bạn không thể dựa vào.

Và để giải quyết, hãy ngừng sử dụng phương pháp đó. Nếu có một API công khai thực hiện những gì bạn muốn, hãy sử dụng nó. Nếu không có, thực hiện nó cho mình.

+0

Tôi không biết mã nguồn đến từ đâu ... đã ở đây trước khi tôi bắt đầu làm việc cho công ty này. – JCisar

+0

Dù bằng cách nào, nếu đó là những gì '_encode' của bạn được đặt thành, bạn thực sự cần phải bỏ qua nó. Mã của bạn sẽ không thất bại với các phiên bản .NET chính thức được phát hành, nhưng sẽ sớm. – hvd

+0

Ở đâu nói rằng các phiên bản mới hơn sẽ giảm giá trị này? – JCisar

1

Nếu bạn gặp phải lỗi này khi sử dụng phần mềm CMS Ektron, sau đây là trong họ 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.

Như đã đề cập trong các câu trả lời khác, một giải pháp là để quay trở lại. Net framew ork 4.0. Các câu trả lời khác trong trường hợp cụ thể này với Ektron là tắt mã hóa cookie hoặc nâng cấp lên 8.7.

+0

Cảm ơn Spongeboy! Bạn đã tiết kiệm một ngày làm việc cho tôi. – eastboundr

Các vấn đề liên quan