2012-02-22 22 views
12

Đây là một vấn đề kinh điển, trong đó có numerous giải pháp described. Tuy nhiên, không ai trong số họ dường như làm việc cho tôi.Không thể tạo lắp ráp - Bộ phận tham chiếu không có tên mạnh. Tại sao các giải pháp khác không hoạt động?

Tôi đang sử dụng thư viện Report.NET trong giải pháp SharePoint. Thêm Reports.dll như là một tham chiếu và biên dịch kết quả trong thông báo lỗi "Thế hệ hội không thành công - Tham chiếu assembly 'Báo cáo' không có tên mạnh." Dự án của tôi, tuy nhiên, có một key.snk được liên kết trong các thuộc tính của dự án. Vì vậy, tôi cố gắng tháo rời, ký và lắp ráp lại dll bằng tệp khóa này, như được mô tả ở nơi khác:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ildasm Reports.dll /out:Reports.il 

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ilasm Reports.il /dll /resource=Reports.res /key=..\key.snk 

<output removed for brevity> 

Class 95 
Class 96 
Method Implementations (total): 1 
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved 
Writing PE file 
Signing file with strong name 
Operation completed successfully 

Tôi kết thúc bằng một Report.dll mới. Tuy nhiên, việc thêm này làm tham chiếu đến dự án và tòa nhà của tôi, cung cấp thông báo lỗi giống như trước đây. Các thuộc tính của tham chiếu "Báo cáo" hiển thị "Tên mạnh: Sai".

Không nản chí bởi một chút rắc rối, tôi cố gắng để tái ký lắp ráp bằng cách sử dụng tiện ích đặt tên mạnh:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>sn -R Reports.dll ..\key.snk 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Assembly 'Reports.dll' successfully re-signed 

Nó có thể là đáng chú ý là chạy tiện ích SN thất bại với thông báo lỗi "Reports.dll không đại diện cho một hội đồng được đặt tên mạnh" khi chạy nó trước quá trình tháo rời/ký/lắp ráp lại.

Tuy nhiên, khi chạy sau khi tháo gỡ/ký/reassembly, tôi vẫn nhận được thông báo lỗi ban đầu khi thêm lại nó vào Visual Studio.

+0

thể trùng lặp của [thế hệ hội thất bại - lắp ráp Được tham chiếu 'Interop.Office' không có một tên mạnh] (http: // stackoverflow .com/question/6845537/assembly-generation-failed-tham chiếu-assembly-interop-office-không-không-có) – JabberwockyDecompiler

Trả lời

20

Tôi chỉ giải quyết vấn đề này trong vs 2010 sử dụng này:

Project Properties -> Signing -> uncheck Sign the assembly checkbox 
+6

Tôi chỉ yêu tràn ngăn xếp. 99% các vấn đề của tôi luôn được giải quyết với sự trợ giúp của tràn ngăn xếp. Bạn tất cả đá !! – Karishma

3

Tôi sẽ đề nghị rằng nếu sau khi bạn đã đánh dấu rõ ràng Reports.dll một cách chính xác từ dòng lệnh, VS vẫn nói rằng dll đó chưa được ký; sau đó nó phải được tham chiếu các tập tin sai.

Nếu bạn muốn thực sự hoang tưởng và kiểm tra kỹ tên mạnh sau khi ký, hãy tải Reports.dll vào ildasm (bạn phải bấm đúp vào nút biểu hiện trong cây và cuộn xuống để tìm phần .publickey) . Hoặc để dễ dàng, chỉ cần mở nó trong ILSpy.

Sau khi ký reports.dll; mở tệp proj của dự án tham chiếu của bạn dưới dạng tài liệu XML (nếu bạn có VS PowerCommands, bạn có thể nhấp chuột phải và 'Chỉnh sửa tệp dự án'; nếu không bạn có thể hủy dự án và sau đó mở nó trong VS bằng cách sử dụng lệnh 'Open With' từ Mở hộp thoại Tệp) và xác minh rằng tham chiếu đến dll thực sự là đường dẫn chính xác. Nếu không, hãy sửa và tải lại dự án.

+0

Xin chào, cảm ơn bạn đã nhập. Sau khi chạy các lệnh ký kết ở trên, ILSpy (công cụ tốt đẹp, bằng cách này) báo cáo [assembly: AssemblyKeyFile ("")] và [assembly: AssemblyKeyName ("")] cho Reports.dll. Tôi đoán điều này có nghĩa là tệp thực sự không được ký? Dấu thời gian của tệp vẫn tương ứng với ký kết nghĩa vụ. –

+0

Không quan tâm - khi bạn chọn nút gốc của hội đồng trong ILSpy, khung bên phải sẽ hiển thị trong hai chú thích đầu tiên tên tệp và sau đó là tên lắp ráp đầy đủ trên dòng thứ hai. Trên dòng thứ hai đó, tên assembly có kết thúc bằng ', PublicKeyToken = [some_hex_string]' không? –

+1

Đây cũng là thư viện 'Report.Net' ở đây: http: // sourceforge.net/projects/report/Nếu vậy bạn có thể không mở dự án và xây dựng lại trong VS với keyfile của bạn như là một phần của quá trình xây dựng? –

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