2009-08-26 28 views
39

Trong dự án web của tôi, tôi đang sử dụng 4 tệp tài nguyên trong thư mục App_GlobalResources của mình. Một trong số họ (lang.resx) đã được tạo trước khi tôi đến dự án. Nó có không gian tên chính xác (WebApplication.App_GlobalResources) và công cụ sửa đổi truy cập: public. Mặt khác, ba tệp tài nguyên khác mà tôi vừa tạo có một không gian tên khác (Resources) và internal công cụ sửa đổi truy cập và tôi không thể thay đổi nó trên Mẫu Tệp Tài nguyên từ Visual Studio vì nó bị tắt. Nếu tôi cố gắng thay đổi nó trực tiếp trong tệp designer.cs, các sửa đổi sẽ bị hủy vào lần lưu tệp tiếp theo.Thay đổi vùng tên tệp (resx) và công cụ sửa đổi truy cập

Nó không phải là một lỗi nghiêm trọng nhưng nó có thể gây hiểu lầm cho các nhà phát triển khác về dự án để tìm không gian tên khác nhau và bổ truy cập cho các tập tin tài nguyên mà họ sẽ sử dụng.

Trả lời

42

Tôi không hoàn toàn chắc chắn nơi mà vấn đề nằm, nhưng tôi có thể nói với bạn rằng bạn có thể giải quyết nó bằng cách thay đổi công cụ dùng để tạo mã.

Khi tôi cố gắng làm theo this article, tôi cũng vấp vào vấn đề này. Sau khi tải xuống các tệp nguồn như tác giả được đề xuất, tôi nhận thấy rằng tệp tài nguyên đã có mặt đã có lớp sau trong thuộc tính "Công cụ tùy chỉnh": "PublicResXFileCodeGenerator". Ngoài ra, thuộc tính "Build Action" được đặt thành "Tài nguyên đã nhúng", nhưng tôi không chắc liệu đó có phải là một phần của vấn đề hay không.

Bất kỳ tập tin tài nguyên mới mà tôi tạo ra sử dụng công cụ tùy chỉnh "GlobalResourceProxyGenerator". Sau khi ghi đè lên điều này với "PublicResXFileCodeGenerator" nói trên dường như để giải quyết vấn đề, bất kể vấn đề thực sự có thể được.

Tôi cũng nhận thấy rằng các tập tin tài nguyên hiện nay là theo định dạng "2.0", trong khi tập tin mới là theo định dạng "1.3". Bạn có thể thấy điều này khi bạn mở tệp resx bằng cách sử dụng trình soạn thảo XML (hoặc bằng cách sử dụng "mở với" từ chính studio trực quan).

Tôi hy vọng bạn có thể làm cho nó hoạt động như thế này, mặc dù nó không lý tưởng. Nó có thể là một vấn đề cài đặt với Visual Studio 2008 và SP1, hoặc một cái gì đó như thế.

Cập nhật:

This blog entry cũng có thể hữu ích.

+0

Mục nhập blog rất hữu ích. Cảm ơn! – ongle

+0

Điều này cũng xảy ra trong VS2010: sao chép + dán tệp resx vào dự án có thể là vấn đề, nó đặt tệp .resx thành GlobalResourceProxyGenerator nếu bạn làm điều này. –

6

Resx chọn không gian tên tùy thuộc vào không gian tên được chỉ định trong cấu hình dự án Visual Studio của bạn. Cập nhật dự án của bạn để có đúng không gian tên, và resx nên thừa kế nó (những cái mới cho chắc chắn, không chắc chắn nếu những cái hiện có sẽ được cố định - họ nên).

+0

không gian tên dự án mặc định có vẻ tốt: 'WebApplication' –

4

Công cụ sửa đổi truy cập tệp tài nguyên nằm trong số .csproj;

Thay đổi trực tiếp các tập tin .csproj nên workaround vấn đề này.

Look cho các phần tử <Generator> và thiết lập giá trị của nó phù hợp với các ví dụ dưới đây:

Một tập tin tài nguyên với internal modifier trông như thế này,

<ItemGroup> 
<EmbeddedResource Update="resources.resx"> 
    <Generator>ResXFileCodeGenerator</Generator> 
    <LastGenOutput>resources.Designer.cs</LastGenOutput> 
</EmbeddedResource> 
</ItemGroup> 

nơi một tập tin tài nguyên với public modifier trông giống như điều này.

<ItemGroup> 
<EmbeddedResource Update="resources.resx"> 
    <Generator>PublicResXFileCodeGenerator</Generator> 
    <LastGenOutput>resources.Designer.cs</LastGenOutput> 
</EmbeddedResource> 
</ItemGroup> 
+0

Sẽ rất hữu ích nếu bạn mở rộng câu trả lời của bạn để nó cũng nói * trong đó * trong phần '.csproj' được cho là trông. Theo như tôi có thể nói, nó chỉ đơn giản là một máy phát điện khác nhau được sử dụng ('PublicResXFileCodeGenerator' thay vì' ResXFileCodeGenerator'). Điều đó cũng có thể được chỉnh sửa trong cửa sổ thuộc tính VS 'cho mục dự án '.resx'. – stakx

+0

cảm ơn @stakx; i thêm ví dụ như đề xuất –

10

Hoặc bạn có thể thay đổi thuộc tính CustomTool (thử nghiệm trong VS2010).

Bạn chỉ cần mở các thuộc tính tập tin của tập tin tài nguyên và thay đổi “công cụ Custom” từ “GlobalResourceProxyGenerator” để “PublicResXFileCodeGenerator”, mà là công cụ mặc định cho địa phương file tài nguyên. Tiếp theo, bạn phải thay đổi “Xây dựng hành động” thành “Tài nguyên được nhúng”. Bạn cũng có thể muốn gán một hợp công cụ Custom Namespace như “Tài nguyên” để truy cập vào các tập tin đúng, nhưng này là không cần thiết ...

Source

+0

Hãy cẩn thận những người sử dụng ASP.NET, bởi vì trong khi xuất bản với "Tài nguyên nhúng" này có thể không xuất bản tại máy chủ. "Xây dựng hành động" là "Nội dung" hoạt động tốt mặc dù –

44

Câu trả lời nhanh chóng là: Chỉ cần mở thuộc tính của tệp tài nguyên và thay đổi Custom Tool Namespace thành không gian tên bạn cần.
Đơn giản như vậy.

+3

Câu trả lời đơn giản nhất cho VS2012 –

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