2009-11-17 23 views
18

Để sử dụng GetGlobalResourceObject() trong Visual Studio 2008, tôi phải sao chép tệp .resx vào thư mục App_GlobalResources của Visual Studio. Sau khi ứng dụng được biên dịch trước, các tệp tài nguyên đang được biên dịch thành các cụm vệ tinh tương ứng và được triển khai trong thư mục \bin\ theo tên văn hóa. Điều này tất cả hoạt động tốt.Thêm cụm từ vệ tinh vào trang web được triển khai được biên dịch trước

Tuy nhiên, tôi không thể thêm cụm vệ tinh mới sau khi ứng dụng đã được biên dịch trước. Những gì tôi đã làm là:

  1. Tạo một Satellite Assembly:

    resgen resources.applicationresources.es-ES.resx resources.applicationresources.es-ES.resources al/t: lib/văn hóa : es-ES /embed:resources.applicationresources.es-ES.resources /out:App_GlobalResources.resources.dll

  2. Thư mục đã tạo \bin\es-ES\ và triển khai tệp .dll ở đó.

Thật không may, cụm vệ tinh mới được thêm vào không được công nhận bởi GetGlobalResourceObject(), quay trở lại tài nguyên mặc định (tiếng Anh). Dường như không có gì sai với tệp tài nguyên vì nếu tôi sao chép cùng một tệp .resx vào App_GlobalResources và sau đó biên dịch ứng dụng, mọi thứ hoạt động tốt.

Tôi đang thiếu gì? BTW loại dự án của tôi là trang web và không phải dự án ứng dụng web.

+1

Bạn đã bao giờ tìm ra giải pháp cho vấn đề này chưa? – splattne

+1

Hiện tại rất khó khăn với chính điều này. – Mig

+1

Vấn đề trong trường hợp của chúng tôi là, trong khi tạo ra các hội đồng vệ tinh thông qua resgen, đường dẫn không gian tên là không chính xác. Chúng tôi đã lồng tiếng cho dll vệ tinh được tạo bằng ILDASM, vì vậy chúng tôi đã sửa nó và triển khai lắp ráp lại. – ksa

Trả lời

0

(Từ Comment by @ksa)

Một điều mà có thể đi sai là một con đường gian tên không chính xác trong các DLL được sản xuất bởi resgen, bạn có thể sử dụng ILDASM hoặc Reflector để so sánh các không gian tên trong DLL làm việc và tạo ra không làm việc DLLS. Sau đó bạn có thể thay đổi dòng lệnh resgen của bạn để tạo ra với không gian tên chính xác.

+0

Wiki cộng đồng như tôi chỉ nhắc lại những gì OP cho biết đã sửa nó trong một nhận xét, để chuyển câu hỏi này khỏi danh sách chưa được trả lời. –

0

Hãy thử kết nối với sự kiện AssemblyResolve trong AppDomain.CurrentDomain và xem liệu nó có thực sự tìm kiếm assembly hay không. Nếu nó tìm kiếm nó, tất cả những gì bạn cần làm là giữ một danh sách các assembly được nạp động và đường dẫn của chúng.

Một lưu ý về AssemblyResolve, nếu bạn không có assembly, trả về null. Đó là hành vi mặc định.

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