2010-11-16 23 views
12

Tôi có một tệp resx và tôi muốn sử dụng nó từ một số giải pháp \ dự án và tôi không muốn có bản sao cục bộ tại mỗi giải pháp (chỉ ở thời gian biên dịch mang một bản sao).Làm cách nào để có các giải pháp khác nhau đề cập đến một tệp resx?

Có cách nào để làm như vậy không? Bởi vì khi tôi thêm nó như là "Thêm tập tin hiện có" nó sao chép cho tôi một bản sao cục bộ.

Bất kỳ ý tưởng nào về cách làm như vậy?

Trả lời

14

Nếu bạn đang sử dụng tệp .resx, bạn có thể muốn tận dụng chức năng mã được tạo tự động mà Visual Studio cung cấp cho tệp .resx. Nếu bạn đang bao gồm một tệp .resx trong nhiều dự án, thì bạn có thể muốn mỗi dự án tự động tạo mã riêng của mình. Bạn có thể làm điều này bởi vì bạn muốn sử dụng trình tạo mã khác cho các dự án nhất định (ResXCodeFileGenerator so với GlobalResourceProxyGenerator) hoặc bạn có thể chỉ muốn vùng tên của mã được tạo ra được căn chỉnh với dự án. Đây là cách bạn có thể thiết lập điều đó.

Tôi đã thiết lập giải pháp mới với dự án ứng dụng bảng điều khiển C# được gọi là SharedResx. Tôi cũng đã thêm một dự án thư viện lớp C# vào giải pháp được gọi là Tài nguyên và trong dự án đó tôi đã thêm một tệp tài nguyên mới có tên là MySharedResource.resx. Visual Studio tự động tạo tệp MySharedResource.Designer.cs trong dự án Tài nguyên của tôi với mã bên trong không gian tên Tài nguyên.

Trước tiên, hãy bao gồm tệp .resx hiện có của bạn trong dự án ứng dụng bảng điều khiển SharedResx dưới dạng liên kết, như các câu trả lời khác đã đề cập. Thêm mục hiện có -> tìm .. \ Resources \ MySharedResource.resx -> sử dụng danh sách thả xuống trên nút Thêm để chọn "Thêm làm liên kết".

Tiếp theo, bạn sẽ phải sửa đổi thủ công tệp dự án để thiết lập tạo tự động. Bạn có thể xem Tài nguyên.csproj để xem cách tạo thế hệ tự động ở đó như một hướng dẫn về cách nó sẽ trông như thế nào trong SharedResx.csproj. Nhấp chuột phải vào dự án SharedResx và chọn Hủy tải dự án. Nhấp chuột phải một lần nữa và chọn Chỉnh sửa SharedResx.csproj. Cuộn xuống để tìm các yếu tố EmbeddedResource tương ứng với file resx liên kết của bạn:

<EmbeddedResource Include="..\Resources\MySharedResource.resx"> 
    <Link>MySharedResource.resx</Link> 
</EmbeddedResource> 

Sửa đổi này bao gồm một yếu tố Generator và một yếu tố LastGenOutput:

<EmbeddedResource Include="..\Resources\MySharedResource.resx"> 
    <Link>MySharedResource.resx</Link> 
    <Generator>ResXFileCodeGenerator</Generator> 
    <LastGenOutput>SharedResx.MySharedResource.Designer.cs</LastGenOutput> 
</EmbeddedResource> 

Lưu ý: thủ công chỉnh sửa chỉ cần thiết nếu bạn muốn kiểm soát tên của tập tin được tạo ra như tôi đã làm trong ví dụ của tôi. Nếu không, bạn có thể chỉ định phần tử Generator bằng cách sử dụng công cụ Custom Tool trong cửa sổ Properties trong Visual Studio.

Cũng lưu ý rằng trong phần tử LastGenOutput tôi đã đặt tên tệp được tạo với tên dự án SharedResx làm tiền tố. Điều này sẽ làm cho ResXFileCodeGenerator tạo một tệp có tên SharedResx.MySharedResource.Designer.cs trong cùng thư mục với tệp .resx. Tôi đã thử nghiệm với việc chỉ định một đường dẫn tương đối thay vì chỉ là tên tệp trong phần tử LastGenOutput để lấy tệp được tạo trong một thư mục khác, chẳng hạn như thư mục SharedResx, nhưng tôi thấy rằng nó không hoạt động ổn định. Mặc dù lần đầu tiên tôi có thể tạo tệp ở vị trí chính xác, phần tử LastGenOutput bị mất giá trị của nó để các thế hệ tiếp theo sẽ không nhắm mục tiêu cùng một vị trí đó. Tôi đã từ bỏ điều đó và chỉ sử dụng tiền tố tên dự án như một phần của tên tệp để tránh xung đột có thể xảy ra với các dự án khác.

Bây giờ, hãy đóng tệp SharedResx.csproj và nhấp chuột phải một lần nữa để chọn Tải lại dự án. Nhấp chuột phải vào tệp MySharedResource.resx được liên kết trong dự án SharedResx và chọn Chạy Công cụ Tùy chỉnh. Bây giờ bạn sẽ thấy rằng một tệp được liên kết mới có tên SharedResx.MySharedResource.Designer.cs đã được thêm vào dự án dưới dạng tệp lồng nhau trong tệp MySharedResource.resx. Bạn có thể phải bật tùy chọn "Hiển thị tất cả tệp" trong cửa sổ Solution Explorer để xem.

Bây giờ bạn có tệp mã được tạo tự động từ tệp .resx được chia sẻ của bạn được bao gồm trong dự án của bạn.

+0

Người học việc của Wily: Chính xác những gì tôi cần –

+1

LastGenOutput đã làm việc hoàn hảo, THANKS! – Fred

2

Tôi chưa thực sự thử điều này với tệp resx nhưng bạn có thể thử Adding As Link.

7

Visual Studio cũng cho phép bạn link to files thay vì sao chép chúng. Tính năng này một chút ẩn, nhưng bạn có thể truy cập vào nó như thế này:

  1. Chọn "add file đang tồn tại"
  2. Sau khi chọn file, đừng không nhấn đúp chuột mà là lưu ý thả xuống mũi tên nhỏ bên cạnh nút "Mở".
  3. Chọn "Tệp liên kết" từ trình đơn thả xuống.
-2

Trong Visual Studio, bạn có khả năng thực thi tập lệnh trước khi biên dịch, sao chép tệp ở đó.

+0

Dường như rõ ràng với tôi OP không muốn sao chép các tệp. –

0

Tôi không biết tại sao, nhưng "Thêm làm liên kết" không hoạt động như mong đợi đối với tôi, nó vẫn cố gắng sao chép tệp trong thư mục dự án (không tốt nếu bạn sử dụng tích hợp Subversion Ankhsvn). Here Tôi đã viết một hướng dẫn từng bước với một cách tiếp cận tương tự như Tiến sĩ Wily's Apprentice nhưng với một số cải tiến, như chia sẻ thời gian thực của các tài nguyên.

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