Tôi đang sử dụng tệp xml làm tài nguyên được nhúng để tải một XDocument. Chúng tôi đang sử dụng đoạn mã sau để tải tệp thích hợp từ hội:Tại sao Assembly.GetExecutingAssembly() trả về null?
XDocument xd = new XDocument();
Assembly assembly = null;
try
{
assembly = Assembly.GetExecutingAssembly();
}
catch(Exception ex)
{
//Write exception to server event log
}
try
{
if(assembly != null)
{
using(StreamReader sr = new
StreamReader(assembly.GetManifestResourceStream("assemblyPath")))
{
using(XmlTextReader xtr = new XmlTextReader(sr))
{
xd = XDocument.Load(xtr);
}
}
}
}
catch(Exception ex)
{
//Write exception to server event log
}
Vì vậy, khi các mã được triển khai, chúng tôi sẽ thường xuyên đi đến trang và không có gì sẽ được nạp từ tài liệu nhúng. Khi chúng tôi kiểm tra nhật ký sự kiện, không có lỗi. Nếu người dùng chỉ làm mới trang, nó sẽ tải tốt. Điều này đã khiến tôi nghĩ rằng, vì một lý do nào đó, assembly = Assembly.GetExecutingAssembly();
trả về số không một cách đại diện, và cách viết mã này không phải là lỗi. Vì vậy, câu hỏi của tôi là tại sao Assembly.GetExecutingAssembly();
sẽ trả về giá trị rỗng? Tôi tìm thấy một vài bài báo nói về có lỗi đôi khi với mã không được quản lý, nhưng ứng dụng này được viết bằng C# và được triển khai thông qua dự án thiết lập.
Mã ban đầu được viết mà không có mã tránh lỗi. Nó đã được thêm vào để giữ cho người dùng không nhận được màn hình lỗi. Các ngoại lệ được ghi vào nhật ký sự kiện của máy chủ.
Một câu hỏi rất ngu ngốc (như tôi không thể chụp ảnh GetExecutingAssembly thất bại trong quản lý mã tinh khiết): làm lỗi xảy ra (trong bất kỳ đoạn mã khác) gây ra một mục Tôi được yêu cầu chỉ để đảm bảo rằng mã ghi sự kiện là chính xác và các ngoại lệ đó có thể bị loại trừ – Timores
Xin lỗi, nên đã chỉ định nó nhiều hơn một chút. dự án tiện ích để viết ngoại lệ cho bản ghi sự kiện. Mã lệnh để làm như vậy được sử dụng trong suốt ứng dụng và công trình.Ngoài ra, mã ở trên nằm trong một phương thức được gọi trong quá trình intialization của trang – Nathan
Vì vậy, sau khi thấy mọi người dường như đồng ý rằng GetExecutingAssemb ly() sẽ không trả về null, tôi quay lại và xem phần còn lại của phương thức. Sau khi tìm kiếm một số tôi tìm thấy bài viết này trên MSDN: http://msdn.microsoft.com/en-us/library/xc4235zt(VS.85).aspx. Trong đó, GetManifestResourceStream() có thể trả về null nếu không tìm thấy tài nguyên hoặc không thể truy cập được. Trả về null cho cấu trúc using() sẽ không gây ra một ngoại lệ. Vì vậy, chúng tôi sẽ triển khai điều này và xem đó có phải là thủ phạm hay không. – Nathan