Tôi đồng ý với phân tích của Aequitarum. Chỉ cần một vài điểm bổ sung:
Động cơ được chia sẻ mã cho tất cả các quy trình, vì vậy tôi giả định rằng có thể là một hội đồng được chia sẻ?
Điều đó có vẻ hợp lý.
Nếu một phiên bản dùng chung trong cùng một giải pháp như một dự án tiêu thụ nó, nó được tiêu thụ như thế nào nếu được cho là nằm trong GAC?
Magic.
OK, nó không phải là ma thuật. Giả sử rằng trong giải pháp của bạn, quá trình của dự án có tham chiếu đến công cụ dự án. Khi bạn xây dựng giải pháp, bạn sẽ tạo ra một dự án assembly có tham chiếu đến công cụ assembly. Visual Studio sau đó sao chép các tệp khác nhau vào đúng thư mục. Khi bạn thực hiện quá trình lắp ráp, bộ tải thời gian chạy biết để tìm trong thư mục hiện tại cho lắp ráp động cơ. Nếu nó không thể tìm thấy nó ở đó, nó sẽ tìm trong bộ nhớ cache lắp ráp toàn cục. (Đây là một cái nhìn rất đơn giản về chính sách tải; chính sách thực sự phức tạp hơn nhiều so với chính sách đó.)
Nội dung trong GAC phải đúng là mã toàn cầu; mã mà bạn mong đợi một cách hợp lý các số lượng lớn các dự án khác nhau để sử dụng.
Điều đó có nghĩa là engine.dll phải được triển khai trên mọi công trình?
Tôi không chắc chắn ý của bạn là "được triển khai lại". Như tôi đã nói, nếu bạn có một tài liệu tham khảo dự án, dự án, hệ thống xây dựng sẽ tự động sao chép các tập tin xung quanh đến đúng nơi.
lý do nguyên tắc chúng tôi tách lọc từ quá trình này (chỉ có một quá trình sử dụng nó) là để chúng tôi có thể triển khai các bộ lọc một cách độc lập từ quá trình để quá trình thực thi không cần phải được cập nhật
Tôi đặt câu hỏi liệu điều đó thực sự có giá trị hay không. Kịch bản một: không có lắp ráp bộ lọc, tất cả các mã bộ lọc là trong project.exe. Bạn muốn cập nhật mã bộ lọc; bạn cập nhật project.exe. Kịch bản hai: filter.dll, project.exe. Bạn muốn cập nhật mã bộ lọc; bạn cập nhật filter.dll. Kịch bản hai rẻ hơn hoặc dễ dàng hơn so với kịch bản một như thế nào? Trong cả hai tình huống bạn đang cập nhật một tệp; tại sao tên của tập tin lại quan trọng?
Tuy nhiên, có lẽ nó thực sự rẻ hơn và dễ dàng hơn cho trường hợp cụ thể của bạn. Điều quan trọng cần hiểu về hội đồng là các bộ phận nhỏ nhất là mã độc lập và có thể phân phối lại được. Nếu bạn có hai điều và nó có ý nghĩa đối với phiên bản và gửi chúng độc lập với nhau, thì chúng nên ở trong các hội đồng khác nhau; nếu nó không có ý nghĩa để làm điều đó, thì họ phải ở trong cùng một hội đồng.
Tôi đã đọc các hội đồng liên kết đến các phiên bản cụ thể của các hội đồng khác, vì vậy nếu tôi cập nhật DLL chỉ, nó thực sự được coi là giả mạo. Làm thế nào tôi có thể cập nhật các DLL mà không thay đổi EXE? Đó có phải là chính sách dành cho nhà xuất bản không?
Một hội đồng có thể được cung cấp một "tên mạnh". Khi bạn đặt tên cho Foo.DLL của bạn, và bạn viết Bar.EXE để nói "Bar.EXE phụ thuộc vào Foo.DLL", thì thời gian chạy sẽ tải bất cứ thứ gì xảy ra được đặt tên là Foo.DLL; tên tệp không mạnh. Nếu một hacker ác có phiên bản Foo.DLL riêng của họ trên máy khách, trình nạp sẽ tải nó. Một tên mạnh mẽ cho phép Bar.EXE nói "Bar.exe phiên bản 1.2 được viết bởi Bar Corporation phụ thuộc vào Foo.DLL phiên bản 1.4 được viết bởi Foo Corporation", và tất cả các xác minh được thực hiện đối với các khóa mã hóa mạnh liên kết với Foo Corp và Bar Corp.
Vì vậy, có, một hội đồng có thể được cấu hình để chỉ ràng buộc với một phiên bản cụ thể từ một công ty cụ thể, để ngăn chặn giả mạo. Những gì bạn có thể làm để cập nhật một assembly để sử dụng một phiên bản mới hơn là tạo một file XML nhỏ cho trình loader biết "Tôi biết làm thế nào tôi nói tôi muốn Foo.DLL v1.4? Vâng, thực sự nếu 1.5 có sẵn, OK của nó để sử dụng điều đó nữa. "
Tôi nên tìm gì? Tôi thấy rất nhiều sách về C# và .NET, nhưng không có gì về triển khai hoặc xây dựng hoặc thử nghiệm hoặc những thứ không liên quan đến chính ngôn ngữ đó.
Triển khai thường bị bỏ qua trong sách, tôi đồng ý.
Tôi sẽ bắt đầu bằng cách tìm kiếm "ClickOnce" nếu bạn quan tâm đến việc triển khai các ứng dụng Windows được quản lý.
cuốn sách hay mô tả chính xác những tệp, tập hợp và mô-đun nào là CLR qua C# bởi Jeffrey Richter. IMHO cuốn sách này là không thể thay thế như là một nguồn cho việc học các nguyên tắc cơ bản của .NET –