Lợi thế của việc sử dụng các cụm được đặt tên mạnh là gì?
Những điều không thể làm được với một lắp ráp bình thường là gì?
Lợi thế của việc sử dụng các cụm được đặt tên mạnh là gì?
Những điều không thể làm được với một lắp ráp bình thường là gì?
Câu trả lời:
Trước tiên, hãy để tôi liệt kê những lợi ích của việc đặt tên mạnh cho assembly của bạn:
Đặt tên mạnh cho assembly của bạn cho phép bạn đưa assembly của mình 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.
Đặt tên mạnh đảm bảo một 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.
Tên mạnh bảo vệ dòng phiên bản của một hội. Một cái tên mạnh có thể đảm bảo rằng không ai có thể tạo ra phiên bản tiếp theo của hội đồng của bạn. Người dùng ứng dụng được đảm bảo rằng phiên bản lắp ráp mà họ đang tải đến từ cùng một nhà xuất bản đã tạo ra phiên bản mà ứng dụng được xây dựng.
Thông tin thêm về cách đặt tên mạnh mẽ từ Microsoft là trong Tập hợp được đặt tên mạnh ( MSDN ).
Những điều không thể làm được với một lắp ráp bình thường là gì?
Vì tất cả các cuộc thảo luận bắt đầu với sự nổi lên của Nuget đề xuất loại bỏ hoàn toàn các tổ hợp có tên mạnh nên công ty của tôi đã thử điều đó và nhận thấy 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 trong phạm vi người dùng do VisualStudio cung cấp (kế thừa System.Configuration.ApplicationSettingsBase) thì EXE có tên mạnh sẽ tạo chính xác 1 thư mục bên trong% LOCALAPPDATA% có tên ví dụ: "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif" bất kể EXE ở đâu nằm.
Nhưng nếu 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 giữa bản dựng DEBUG và RELEASE, tạo nhiều thư mục bên trong% LOCALAPPDATA% có tên như "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf". Điều này làm cho nó không sử dụng được cho các triển khai ClickOnce trong đó thư mục cài đặt thay đổi theo mỗi bản cập nhật.
Tôi muốn thêm rằng nếu không có tên mạnh, bạn không thể sử dụng chuyển hướng ràng buộc trong các tệp cấu hình.
Điều này sẽ không hoạt động:
<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ã thông báo khóa công khai
<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>
Chỉ là một ví dụ: Tôi muốn đưa ra một câu trả lời nhấn mạnh hơn vào vấn đề bảo mật . Trong trường hợp chúng tôi tạo các hội đồng bằng mã nguồn mà chúng tôi không muốn sử dụng lại cho bên thứ ba nhưng chúng tôi muốn nó có thể kiểm tra được, chúng tôi có thể mạnh dạn ký một hội đồng và làm cho phần bên trong chỉ hiển thị cho các hội đồng đó với cùng một chữ ký.