Tôi có một ứng dụng WPF gặp sự cố khi tôi đưa nó lên các máy không có môi trường phát triển được cài đặt-- nếu đây là một bản dupe, tôi được chào đón để đóng, nhưng tôi không tìm được trang tương đương câu hỏi. Có vẻ như tôi đang nhận được XamlParseException, nhưng không có gì hữu ích hơn thế. Tôi cần lấy thông tin hữu ích.Làm thế nào tôi có thể nhận được thông tin lỗi WPF .NET hữu ích từ máy của người dùng?
Đi qua Windows 7 bản ghi sự kiện mang lại cho tôi log lỗi này:
Fault bucket , type 0
Event Name: CLR20r3
Response: Not available
Cab Id: 0
Problem signature:
P1: MyApp.exe
P2: 1.0.0.0
P3: 4b88323d
P4: PresentationFramework
P5: 3.0.0.0
P6: 4a174fbc
P7: 624f
P8: e1
P9: System.Windows.Markup.XamlParse
P10:
Attached files:
C:\Users\Mark\AppData\Local\Temp\WER7DC.tmp.WERInternalMetadata.xml
These files may be available here:
C:\Users\Mark\AppData\Local\Microsoft\Windows\WER\ReportArchive
\AppCrash_generatortestbed_4fa7dff09a9e893eb675f488392571ced4ac8_04ef1100
Analysis symbol:
Rechecking for solution: 0
Report Id: cd55060c-271f-11df-b6ff-001e52eefb8e
Report Status: 1
Tôi đã kiểm tra những thư mục, và là người đầu tiên không tồn tại, trong khi thứ hai chứa một tập tin wer mà chỉ liệt kê các nạp dlls.
Tôi có thể cài đặt môi trường phát triển trên máy thử nghiệm của mình, nhưng sau đó nó không thể là máy thử nghiệm và tôi quay lại hình vuông. Tôi không nhận được lỗi này với môi trường dev được cài đặt, vì vậy tôi đang thua lỗ về cách nhận thông báo lỗi hữu ích, tiết kiệm.
EDIT: xây dựng tắt của comment @Alastair Pitts' bên dưới, dưới đây là cách tôi điền vào việc xử lý ngoại lệ:
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) {
Exception theException = e.Exception;
string theErrorPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\GeneratorTestbedError.txt";
using (System.IO.TextWriter theTextWriter = new System.IO.StreamWriter(theErrorPath, true)){
DateTime theNow = DateTime.Now;
theTextWriter.WriteLine("The error time: " + theNow.ToShortDateString() + " " + theNow.ToShortTimeString());
while (theException != null) {
theTextWriter.WriteLine("Exception: " + theException.ToString());
theException = theException.InnerException;
}
}
MessageBox.Show("The program crashed. A stack trace can be found at:\n" + theErrorPath);
e.Handled = true;
Application.Current.Shutdown();
}
Hy vọng rằng, tôi sẽ nhận được những gì tôi cần theo cách này. Cảm ơn đã giúp đỡ!
Nếu ITIS một XamlParseError, dường như lỗi đó sẽ xảy ra trước khi tôi có thể sử dụng bất kỳ mã, chỉ trong bản vẽ của cửa sổ ứng dụng. Có cách nào để theo dõi ngoại lệ này trước khi mã người dùng được gọi không? Hay tôi sai về XamlParseErrors? – mmr