2010-03-01 20 views

Trả lời

78

Hãy để tôi liệt kê những lợi ích của việc đặt tên mạnh lắp ráp của bạn đầu tiên:

  1. mạnh đặt tên lắp ráp của bạn cho phép bạn bao gồm lắp ráp của bạn vào Global Assembly Cache (GAC). Vì vậy nó cho phép bạn chia sẻ nó giữa nhiều ứng dụng.

  2. Đặt tên mạnh đảm bảo tên duy nhất cho hội đồng đó. Vì vậy, không ai khác có thể sử dụng cùng một tên lắp ráp.

  3. Tên mạnh bảo vệ dòng phiên bản của hội đồng. Một tên mạnh có thể đảm bảo rằng không ai có thể sản xuất phiên bản lắp ráp tiếp theo của bạn. Người dùng ứng dụng được đảm bảo rằng một phiên bản của hội đồng họ đang tải đến từ cùng một nhà xuất bản đã tạo phiên bản ứng dụng được xây dựng cùng.

  4. Hội đồng có tên mạnh được ký bằng chữ ký số. Điều này bảo vệ lắp ráp từ sửa đổi. Bất kỳ sự giả mạo nào gây ra quá trình xác minh xảy ra tại thời gian tải lắp ráp bị lỗi. Một ngoại lệ được tạo ra và lắp ráp không được nạp.

Thông tin thêm về cách đặt tên mạnh mẽ từ Microsoft là trong Strong-Named Assemblies (MSDN).

+0

Cảm ơn 1 cho câu trả lời nhanh – developer

+0

Bạn có chắc chắn về mục 4? Tôi nghĩ có lẽ bahavior này đã thay đổi gần đây. Tôi đã cố gắng để có được tải của một hội đồng tên mạnh mẽ để thất bại bằng cách sửa đổi nó, nhưng nó nạp mà không có sự cố. – Jens

+0

@Jens: Bạn đã thử và xác minh tên mạnh theo cách thủ công chưa? –

6

Điều gì không thể thực hiện được với lắp ráp bình thường?

Vì tất cả các cuộc thảo luận bắt đầu với sự trỗi dậy của NuGet gợi ý để hoàn toàn thoát khỏi lắp ráp tên mạnh công ty của tôi cố gắng đó và đi qua một sự thay đổi đáng kể về hành vi khi nói đến cài đặt ứng dụng:

Nếu bạn sử dụng ứng dụng tự động hoặc cài đặt ứng dụng phạm vi người dùng được cung cấp bởi VisualStudio (kế thừa System.Configuration.ApplicationSettingsBase) sau đó một EXE tên mạnh sẽ tạo chính xác 1 thư mục bên trong% LOCALAPPDATA% được đặt tên ví dụ "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif" cho dù EXE nằm ở đâu .

Nhưng không có tên mạnh, vị trí (= đường dẫn) của EXE sẽ được sử dụng để tạo giá trị băm khác nhau giữa DEBUG và RELEASE, tạo nhiều thư mục bên trong% LOCALAPPDATA% có tên "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf". Điều này làm cho nó không thể sử dụng cho các triển khai ClickOnce nơi thư mục cài đặt thay đổi với mọi cập nhật.

0

Chỉ cần một ví dụ: Tôi muốn đưa ra câu trả lời nhấn mạnh hơn trong số security. Trong trường hợp chúng ta tạo các assembly với mã nguồn mà chúng ta không muốn được tái sử dụng cho một bên thứ ba nhưng chúng ta muốn nó có thể kiểm tra được, chúng ta có thể ký một assembly và làm cho các internals chỉ hiển thị cho các assembly đó cùng một chữ ký.

3

Tôi muốn thêm rằng không có tên mạnh, bạn không thể sử dụng chuyển hướng ràng buộc trong tệp cấu hình.

này sẽ không làm việc:

<dependentAssembly> 
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 

Bạn cần có một công chìa khóa thẻ

<dependentAssembly> 
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 
+2

Không cần chuyển hướng ràng buộc nếu bạn không có tên mạnh. – trampster

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