2012-12-18 39 views
13

Tôi đang viết phần mở rộng Visual Studio 2012, để sử dụng nội bộ, yêu cầu tất cả các hội đồng đều có tên mạnh. Tôi phụ thuộc vào RestSharp (và một vài dll khác), và vì nó không được đặt tên mạnh, tôi thêm một tên mạnh vào nó bằng cách theo dõi this. Tất cả mọi thứ hoạt động theo đầu ra của quá trình, và thậm chí tuyên bố phòng thu trực quan nó được đặt tên mạnh nếu tôi nhìn vào các thuộc tính của RestSharp.dll trong tài liệu tham khảo dự án. Tuy nhiên, khi tôi sử dụng tiện ích mở rộng của mình, tôi nhận được xác nhận quyền sở hữu FileLoadException:Đặt tên thật mạnh cho hội đồng bên thứ 3 - Không thể tải tệp hoặc lắp ráp

Could not load file or assembly 'RestSharp, Version=104.1.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044) 

Bất kỳ suy nghĩ nào về cách giải quyết vấn đề này hoặc khắc phục?

+0

Từ 'PublicKeyToken = null', nó đang tìm kiếm một * unsigned * phiên bản của assembly. Tôi sẽ loại bỏ tất cả các tài liệu tham khảo của bạn để RestSharp, và thêm chúng vào hội đồng đã ký kết. – vcsjones

+0

Trong sự kiện dựng sẵn, tôi thực hiện bước ilasm iasmasm và sau đó xây dựng dự án. Vì dự án đang tham chiếu dll từ đường dẫn đã chỉ định, trong đó dll được ký mới là, nó có nên có phiên bản đã ký không? Tham chiếu dự án có thực sự phải được ký không? Tôi đã giả định rằng dll được ký kết tại thời điểm xây dựng sẽ là đủ. – Adam

+4

'Tham chiếu dự án có thực sự phải được ký không? Ký tên sau khi thực tế không đủ tốt. Tệp kê khai assembly cho assembly của bạn * references * RestSharp theo dõi tên assembly đầy đủ, bao gồm tên mạnh (hoặc vắng mặt). – vcsjones

Trả lời

0

Một vài điều bạn có thể kiểm tra:

Có vẻ như bạn dự refrence vẫn là dll unsigned \ RestSharp.dll.. Bạn nên biên dịch dự án của mình dựa vào tệp. \ Signed \ RestSharp.dll đã ký. Hủy bỏ các thiết bị điện tử hiện tại và thêm lại.

Ngoài ra, hãy kiểm tra dll trong thư mục bin của dự án của bạn. Có thể RestSharp.dll cũ vẫn còn đó. Loại bỏ nó và kiểm tra tất cả các thư mục xây dựng.

Bạn cũng có thể kiểm tra xem restsharp.dll có nằm trong bạn GAC hay không. Nếu như vậy loại bỏ các dll từ gấc của bạn.

1

Tôi đã cố gắng sử dụng RestSharp từ VSPackage và nó hoạt động. Các bước của tôi để thêm RestSharp:

  1. Thêm RestSharp bởi NuGet vào một dự án mà tôi sẽ sử dụng nó. Để thực hiện điều này, nhấn chuột phải vào dự án trong Solution Explorer và chọn “Manage NuGet Packages…”, tìm RestSharp và nhấn nút Install.

  2. mã kiểm tra Viết trong dự án này:

    
    var test = new RestSharp.RestClient("http://test.com"); 
    Logger.Log(Category.Info, "Test {0}", test.BaseUrl); 
    
  3. Thêm RestSharp bởi NuGet trong dự án trình cài đặt. Tương tự đoạn 1. Tôi sử dụng VSIX Deployment Package. Để thiết lập assembly cần thiết chỉ cần thêm một tham chiếu đến assembly trong gói triển khai VSIX. Điều này làm cho lệnh “Quản lý gói NuGet…”. Khi bạn tạo VSPackage bởi VS Wizard, dự án chính của VSPackage là gói triển khai VSIX.

    Nếu bạn sử dụng một phương pháp cài đặt phần mở rộng VS của bạn (ví dụ, trình cài đặt MSI), bạn cần thêm rõ ràng RestSharp.dll vào gói cài đặt của chúng tôi.

Kết quả là, tôi có dòng "Test http://test.com" trong nhật ký.

Rất có thể trong trường hợp của bạn, rằng RestSharp.dll không được cài đặt và do đó VS không tìm thấy RestSharp.dll khi tải mô-đun của bạn. Hoặc tên đầy đủ của lắp ráp RestSharp được cài đặt khác với tên đầy đủ của hội đồng trong Tham khảo dự án. Để xem điều này kiểm tra xem tập tin RestSharp.dll trong thư mục của phần mở rộng của bạn (cho VSPackage theo bản vá mặc định là "% LOCALAPPDATA% \ MICROSOFT \ VISUALSTUDIO \ 11.0EXP \ EXTENSIONS \ {YourCompanyName} \ {YourProductName} \ {YourProductVersion} \"). Bạn có thể thấy đường dẫn tuyệt đối cho tiện ích của mình trong cửa sổ Mô-đun Mô-đun nếu chạy tiện ích mở rộng trong trình gỡ lỗi.

Chỉnh sửa: Tôi vừa mới nhận thấy rằng cụm từ RestSharp từ NuGet không có tên mạnh. Vì vậy, thư mục của phần mở rộng được cài đặt và Tài liệu tham khảo của các dự án nên chứa chính xác cùng một lắp ráp với một tên mạnh mẽ, và tất cả mọi thứ sẽ làm việc tốt.

5

Tôi đã viết gói phần mềm giải pháp NuGet để giúp mạnh mẽ đặt tên cho hội đồng bên thứ 3 bằng khóa của riêng bạn.

này được nhắm mục tiêu để ký kết các nội dung của gói NuGet có sử dụng cụm unsigned, để có thể liên kết tới các gói nơi có dự án tiêu thụ được đặt tên mạnh. Truy cập vào mã nguồn gốc không bắt buộc và bạn có thể ký bất kỳ lắp ráp nào với khóa đặt tên mạnh mẽ của riêng bạn. Bạn cũng có thể trì hoãn ký nếu muốn.

https://nuget.org/packages/Nivot.StrongNaming

Bạn có thể đọc thêm về nó trên blog của tôi:

http://www.nivot.org/blog/post/2013/04/30/Signing-unsigned-assemblies-in-NuGet-packages

+0

Xin chào, công việc tuyệt vời. Tôi có một vấn đề: Khi tôi ký một bên thứ 3 lắp ráp từ nuGet với công cụ của bạn tất cả mọi thứ hoạt động tốt. Nhưng có vẻ như sau khi khởi động lại VS tôi nhận được thông báo lỗi cũ một lần nữa và phải sử dụng công cụ của bạn một lần nữa để đăng ký lắp ráp. Tôi đang làm điều gì đó sai hay tôi chỉ cần đặt các lệnh để đăng nhập vào sự kiện dựng sẵn của dự án của tôi? Thanx vì sự giúp đỡ của bạn! – SolarX

+0

Hmm, có thể VS đang xây dựng lại đầu ra vì nó cho rằng nó đã lỗi thời? Tôi không chắc ... xin lỗi. – x0n