2009-12-04 31 views
14

Tôi muốn biên dịch App_GlobalResources/Strings.resx vào lắp ráp của tôi (và cuối cùng sử dụng lắp ráp vệ tinh cho Strings.es.resx, Strings.fr.resx, vv .) nhưng lỗi sau xảy ra khi ứng dụng được xuất bản:Làm thế nào để sử dụng nguồn lực toàn cầu biên soạn trong ASP.NET MVC

"Không thể tải tệp hoặc lắp ráp 'App_GlobalResources' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy tệp được chỉ định".

Các bước để tạo:

  1. Tạo một dự án ASP.NET MVC mới.
  2. Thêm thư mục App_GlobalResources và tệp Strings.resx.
  3. Đặt xây dựng hành động của tập tin để 'Embedded Resource'
  4. Thêm một chuỗi để Strings.resx và sử dụng nó trong HomeController.Index(), ví dụ ViewData["Message"] = Strings.MyTest
  5. F5 để gỡ lỗi, hoạt động tốt.
  6. Xuất bản lên IIS và (kể từ Strings.resx bị loại trừ khỏi xuất bản), bạn sẽ nhận được lỗi ở trên trong trang web đã xuất bản.

Dự án ASP.NET MVC có thể sử dụng tài nguyên chuỗi được biên dịch vào dll và nếu có, tôi đang làm gì sai?


Cập nhật: Đây là những gì tôi nhìn thấy trong Reflector: String Resources

Vậy tại sao là ResourceManager không tìm thấy họ? Theo mặc định, nó không phải là fallback to the main assembly?

Trả lời

23

Dưới đây là một điểm khởi đầu tốt http://odetocode.com/Blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspx

tôi thiết lập một dự án giống như bạn đề cập và nhận được một cách chính xác các lỗi tương tự khi tôi triển khai tới IIS6. Thay đổi Custom Tool thành PublicResXFileCodeGeneratorCustom Tool Namespace đến Resources mỗi đề xuất của Scott đã xóa nó ngay lập tức.

Tôi cũng sẽ theo sau sự dẫn dắt của Scott về việc loại bỏ App_GlobalResources nhưng tôi đã làm cho nó hoạt động tốt. Đó có thể là vấn đề sở thích cá nhân.

+0

Câu trả lời hay! Hoạt động tuyệt vời. Cảm ơn bạn. –

+0

_Great_ liên kết! Cảm ơn bạn! –

+0

@ w0rd-driben, tôi đã xây dựng assembly1 chứa globalresource và được công khai khi bạn đăng bài, nhưng khi sử dụng assembly này trong một dự án khác và sử dụng mã: "<% $ Resources: General, SomeKey%>" not working ... any ý tưởng? Cảm ơn – Mhmd

0

Có lẽ có một điều nữa bạn nên biết về Bộ công cụ phát hiện PublicResXFileCodeGenerator - nó không hoạt động với các tệp có nhiều hơn một dấu chấm trong tên tệp (xem http://social.msdn.microsoft.com/Forums/ru-RU/9412f049-acd8-4a77-b73a-f3810df18376/naming-resources-files-issue-aspnet-mvc-3?forum=dlr). Vì vậy, codebehind cho Strings.es.resx, Strings.fr.resx, v.v. vẫn trống. Giải pháp dễ dàng là đổi tên các tệp.

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