2008-08-15 33 views
11

Tôi đang sử dụng XmlSerializer để tuần tự hóa một loại đặc biệt trong mscorelib.dllFileNotFoundException cho mscorlib.XmlSerializers.DLL, mà không tồn tại

XmlSerializer ser = new XmlSerializer(typeof([.Net type in System])); 
return ([.Net type in System]) ser.Deserialize(new StringReader(xmlValue)); 

này ném một bắt FileNotFoundException khi lắp ráp được tải:

"không thể tải tập tin hoặc lắp ráp 'mscorlib.XmlSerializers, Version = 2.0.0.0, Culture = trung tính, PublicKeyToken = b77a5c561934e089' hoặc một trong những phụ thuộc của nó. các sys tem không thể tìm thấy tệp được chỉ định. "

FusionLog:

=== Pre-bind state information === 
LOG: User = ### 
LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86 
(Fully-specified) 
LOG: Appbase = file:///C:/localdir 
LOG: Initial PrivatePath = NULL 
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. 
=== 
LOG: This bind starts in default load context. 
LOG: Using application configuration file: C:\localdir\bin\Debug\appname.vshost.exe.Config 
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Post-policy reference: mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86 
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.DLL. 
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.DLL. 
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers.EXE. 
LOG: Attempting download of new URL file:///C:/localdir/bin/Debug/mscorlib.XmlSerializers/mscorlib.XmlSerializers.EXE. 

Theo như tôi biết không có mscorlib.XmlSerializers.DLL, tôi nghĩ tên DLL có ong tự động được tạo ra bởi Net tìm kiếm các serializer.

Bạn có tùy chọn tạo một myApplication.XmlSerializers.DLL khi biên dịch để tối ưu hóa tuần tự hóa, vì vậy tôi giả định đây là một phần của việc kiểm tra khung của nó.

Vấn đề là điều này dường như gây ra sự chậm trễ trong việc tải ứng dụng - dường như treo trong vài giây tại thời điểm này.

Bất kỳ ý tưởng nào để tránh điều này hoặc tăng tốc nó?

+0

Loại tôi đang xử lý là 'RSAParameters' đang được sử dụng như một phần nếu một số công cụ mã hóa hệ thống. Tôi đã làm việc xung quanh việc này ngay bây giờ bằng cách lưu khóa được mã hóa bằng một phương tiện khác và tự tạo một RSAParameters mới. Dường như một thứ tương đối phổ biến muốn nối tiếp (tức là các khóa mã hóa/giải mã). – Keith

+0

Tôi đã gặp sự cố này khi cố chạy công cụ kiểm tra Ranorex. Tôi có một giải pháp cho bây giờ nhưng đã không thể sửa chữa nó và hỗ trợ của họ vẫn chưa liên lạc với tôi. : -/ –

Trả lời

2

Tôi đoán bây giờ. nhưng:

  1. Hệ thống có thể đang tạo bộ nối tiếp cho toàn bộ mscorlib, có thể rất chậm.
  2. Bạn có lẽ có thể tránh điều này bằng cách gói loại hệ thống theo kiểu của riêng bạn và nối tiếp thay vào đó - sau đó bạn sẽ nhận được bộ nối tiếp cho hội đồng của riêng bạn.
  3. Bạn có thể xây dựng bộ nối tiếp cho mscorlib với sgen.exe, đây là cách cũ để xây dựng các trình dll serializer trước khi nó được tích hợp vào VS.
+0

Xin cảm ơn một lần nữa. Tôi nghĩ rằng đó là (1), nhưng tôi không thể làm (2) vì đó là cấu trúc. Tôi sẽ thử (3) – Keith

+0

> nhưng tôi không thể làm (2) vì nó là một cấu trúc. Tôi biết mình bị mờ ở đây, nhưng vấn đề với cấu trúc là gì - rõ ràng có thể có thêm một số sao chép, nhưng liên quan đến chi phí xml serialization thì có vẻ như không có gì đáng kể. Loại system.xx là gì? –

4

Sự chậm trễ là vì, không thể tìm thấy dll serializer tùy chỉnh, hệ thống đang xây dựng mã tương đương (rất tốn thời gian) khi đang di chuyển.

Cách để tránh sự chậm trễ là phải có hệ thống xây dựng DLL và đảm bảo rằng nó có sẵn cho tệp .EXE - bạn đã thử điều này chưa?

+0

Xin cảm ơn @Will Dean, đó là điều tôi đã tưởng tượng, nhưng có vẻ như quá chậm ngay cả đối với điều đó. Nếu đó là hội đồng của riêng tôi tạo ra hội đồng tuần tự hóa không phải là một vấn đề, nhưng làm thế nào tôi sẽ làm điều đó cho mscorlib? – Keith

4

Được rồi, vì vậy tôi đã gặp sự cố này và đã tìm thấy giải pháp cho nó cụ thể cho khu vực của tôi.

Điều này xảy ra vì tôi đã cố gắng sắp xếp một danh sách vào một tài liệu XML (tệp) mà không có thuộc tính gốc XML. Sau khi tôi thêm các tệp sau, lỗi sẽ biến mất.

XmlRootAttribute rootAttribute = new XmlRootAttribute(); 
rootAttribute.ElementName = "SomeRootName"; 
rootAttribute.IsNullable = true; 

Dunno nếu nó sẽ khắc phục được sự cố của bạn, nhưng nó đã sửa lỗi của tôi.

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