2010-10-05 35 views
13

Tôi đang gặp vấn đề tương tự với những gì Paul đã có một năm trước đây (xem How to add manifest to a .NET DLL?). Đó là, tôi có một dự án thư viện lớp C# trong Visual Studio 2008, kết quả đầu ra một dll. Các dll tài liệu tham khảo một số hội đồng tư nhân, vì vậy tôi muốn thêm một biểu hiện lắp ráp để dll chỉ định những hội đồng tham chiếu khác.Cách thêm tệp kê khai assembly vào một dự án thư viện lớp C# .NET trong Visual Studio 2008?

Tôi biết cách thực hiện điều này cho một tệp thực thi, nó chỉ là appName.exe.manifest và khi tệp được đưa vào dự án, bạn có thể chỉ chọn tệp đó làm tệp kê khai trong thuộc tính dự án.

Theo câu trả lời mà Ruben đã đưa ra cho Paul (trong luồng ngăn xếp ngăn xếp ở trên), một tệp kê khai chỉ áp dụng cho exes. Tuy nhiên, các tài liệu Microsoft trên biểu hiện dường như đề nghị ngược lại (đúng cho tôi nếu tôi sai), MSDN Assembly Manifests:

Một biểu hiện lắp ráp là một tập tin XML mô tả một side-by-side lắp ráp. Tệp kê khai hội đồng mô tả tên và phiên bản của từng cạnh hội đồng, tệp và tài nguyên của lắp ráp, cũng như sự phụ thuộc của của hội đồng trên các cụm khác nhau cạnh nhau. Chỉnh sửa cài đặt, kích hoạt và thực hiện các hội đồng song song yêu cầu bản kê khai lắp ráp luôn đi kèm với cụm lắp ráp trên hệ thống .

Do cách side-by-side tìm kiếm private assemblies, các sau đặt tên hạn chế áp dụng khi đóng gói một DLL như một private assembly. Một cách được khuyến nghị để thực hiện điều này là đặt tệp kê khai assembly vào DLL dưới dạng tài nguyên. Trong trường hợp này, ID tài nguyên phải bằng 1 và tên của hội đồng tư nhân có thể giống với tên của DLL. Ví dụ: nếu tên của tệp DLL là Microsoft.Windows.mysample.dll, giá trị thuộc tính tên được sử dụng trong phần tử assemblyIdentity của biểu mẫu cũng có thể là Microsoft.Windows.mysample.

Cách khác là đặt bản kê khai lắp ráp vào một tệp riêng biệt. Trong trường hợp này, tên của assembly và biểu hiện của nó phải khác nhau so với tên của DLL. Ví dụ, Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest, và Microsoft.Windows.Mysample.dll

Vì vậy, tôi đã tạo ra một assembly manifest assemblyName.manifest như một tập tin riêng biệt, và bao gồm nó trong dự án thư viện lớp. Nhưng khi tôi đi đến các đặc tính của dự án, tôi nhận được kết quả tương tự mà Paul đã làm, tùy chọn sử dụng tệp kê khai của riêng bạn bị vô hiệu hóa.

Tôi có làm gì sai không? Làm cách nào để thêm tệp kê khai của tôi vào assembly?

+0

FYI: Vẫn áp dụng cho Visual Studio 2012 –

+0

Và cũng VS2015 – DaveInCaz

Trả lời

10

Những gì bạn trích dẫn là khá không phù hợp với các hội đồng .NET. Bộ nhớ cache side-by-side của Windows dành cho các DLL không được quản lý, tương đương chính xác trong .NET là GAC. Hơn nữa, trình biên dịch đã nhúng tham chiếu đến các assembly phụ thuộc trong tệp kê khai assembly.Bạn có thể nhìn thấy nó nếu bạn chạy Ildasm.exe trên lắp ráp của bạn. Nhấp đúp vào tệp kê khai, bạn sẽ thấy các chỉ thị .assembly được liệt kê.

Fwiw, việc nhúng tệp kê khai Windows của riêng bạn vào thư viện lớp học không phải là vấn đề. Chỉ cần sử dụng Project + Add New Item và chọn mục mẫu File Manifest File. Nội dung được tạo tự động hoàn toàn sai đối với một tệp DLL tất nhiên nhưng nó được nhúng trong tệp DLL. Bạn có thể xem rằng bằng cách sử dụng Tệp + Mở + Tệp và chọn cụm của bạn. Bạn sẽ thấy RT_MANIFEST với ID tài nguyên 2. Chỉ cần nhắc lại: không làm điều này cho một DLL được quản lý trừ khi bạn muốn nhập các chỉ thị COM không có reg.

+0

Tôi nghĩ kích hoạt đăng ký miễn phí là những gì tôi cần (MSDN [Cách: Cấu hình .NET dựa trên thành phần kích hoạt miễn phí] (http://msdn.microsoft.com/en-us/library/eew13bza(v=VS.90).aspx)). Các hướng dẫn được đưa ra trong tài liệu có vẻ khá phức tạp, có cách nào dễ dàng hơn để làm điều này thông qua Visual Studio, thay vì thông qua các công cụ dòng lệnh không? –

+0

Tôi quyết định đi với một thay thế cho dự án của tôi, nhờ sự giúp đỡ của bạn mặc dù Hans, tôi đánh giá cao nó! –

+0

FYI: câu trả lời của bạn vẫn áp dụng cho VS 2012. Một tệp kê khai được thêm vào dự án sẽ được nhúng vào. Sử dụng nội dung EXE mặc định dẫn đến lỗi SXS, nhưng sử dụng nội dung kích hoạt COM miễn phí là tốt. –

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