2010-03-04 31 views
5

Vòng tròn này tròn và tròn tôi biết nhưng tôi dường như không thể tìm thấy câu trả lời thỏa đáng.Xem lại Cài đặt GAC

Hội đồng có nên tham gia GAC ​​không? Những câu hỏi sau: when-and-when-not-to-install-into-the-gacWhat are the advantages and disadvantages of using the GAC, giải quyết chính xác điều đó nhưng câu trả lời là rất nhiều "bạn nên ..." hoặc "bạn chỉ nên ...". Tại sao???

Rất nhiều blog của GAC ​​naysaying dường như có từ ngày 5/6 năm trước khi ngôi sao của .Net bắt đầu tăng lên. Chúng ta có còn ở đó không? Chắc chắn DLL-Hell là một điều của quá khứ với các bên hỗ trợ GAC bên cài đặt các phiên bản khác nhau của "cùng" lắp ráp?

Hãy để tôi nêu ra những lo ngại của mình. Chúng tôi có một bộ ứng dụng web ngày càng tăng (5 cho đến nay). Đây là những phần mở rộng của ứng dụng bên thứ ba thông qua các cuộc gọi API và phần mở rộng cơ sở dữ liệu. Rõ ràng, do đó, tất cả các ứng dụng này chia sẻ nhiều mã chung và chúng tôi đang phát triển một bộ thư viện chia sẻ cốt lõi mới để cải thiện chất lượng, bảo trì, v.v.

Chắc chắn tôi muốn chức năng chia sẻ này được cài đặt một lần và chia sẻ. Tất cả các lập luận về việc mở một cơn ác mộng bảo trì dường như dựa trên một số thế giới của kỷ luật nghèo. Nếu bạn phá vỡ ABI sau đó chạm vào AssemblyVersion là đủ để giữ cho các ứng dụng hiện tại của bạn hoạt động.

GAC thực sự là một cái bẫy mật ong cho sự không ngờ? Tôi có ngây thơ không? Tôi có phải là không cần thiết khắc nghiệt khi tôi bác bỏ các lý do trích dẫn sự mất mát của 'XCopy' cài đặt như là whinges lười biếng? Hoặc là nó nhận được một chút "Tôn giáo" và tôi chỉ nên đi với những gì có vẻ đúng?

Cảm ơn bạn đã giúp tôi nhìn thấy ánh sáng.

Dan

+0

Tiếp theo câu trả lời của David tôi đã rút ra kết luận rằng GAC là một nơi tốt và đáng kính để lưu trữ hội đồng của chúng tôi miễn là chúng tôi cẩn thận với những thay đổi chúng tôi thực hiện. Tôi nghĩ rằng một thực thể có thể cài đặt duy nhất ở một nơi có thể nhận dạng duy nhất sẽ làm cho chiến lược phát triển và triển khai tổng thể của chúng tôi dễ quản lý và bảo trì hơn. Vì vậy, cảm ơn David một lần nữa vì đã trả lời. Tôi đã đánh dấu nó như là một câu trả lời mặc dù điều này rõ ràng là một khu vực của một số chủ quan. Cảm ơn, Dan –

Trả lời

2

Cá nhân tôi chưa bao giờ cài đặt bất kỳ hội đồng nào trực tiếp trong GAC (ngoại trừ một bài tập thuần túy về học thuật). Tôi đã nghe những lý lẽ trước khi về việc sử dụng một hội đồng từ một vị trí tập trung được truy cập từ một số ứng dụng, và trong khi đó có vẻ hơi hấp dẫn, cá nhân, nó không có giá trị thời gian của tôi. Máy tính đi kèm với 320GB không gian đĩa cứng những ngày này ... lắp ráp measly 160K của tôi sẽ không làm cho một vết lõm trong đó, ngay cả khi nó được sao chép 5 lần. (Tất nhiên, một số người có thể tranh luận "vấn đề của commons" ... bạn biết: "nếu mọi nhà phát triển nghĩ như vậy ....", nhưng tôi digress). Lý do chính tôi chọn không làm điều này là bởi vì một ứng dụng cụ thể có thể dựa vào lắp ráp theo một cách, trong khi một ứng dụng khác có thể dựa vào nó theo một cách khác. Trong khi trong một thế giới lý tưởng, cập nhật cho hội đồng này không bao giờ nên ảnh hưởng đến các ứng dụng dựa vào nó, trong thực tế, nó thường làm. Nếu tôi đang sửa chữa một vấn đề với một assembly bởi vì một ứng dụng cụ thể có vấn đề với nó, tôi vô tình ảnh hưởng đến các ứng dụng khác dựa vào assembly cụ thể đó. Mặt khác, một số người có thể lập luận rằng tình huống này làm cho chúng ta lập trình tốt hơn và làm cho hội đồng GAC-Shared của chúng ta chống đạn hơn. Điều đó thật tuyệt, nhưng công việc của tôi là một lập trình viên không phải là chủ yếu để làm cho mình trở thành một lập trình viên giỏi hơn, nhưng để viết các chương trình hoạt động, và làm như vậy, tôi sẽ trở thành một lập trình viên tốt hơn.

Vì vậy, phiếu bầu của tôi là gì? Tránh xa GAC. Hãy để mỗi ứng dụng dựa vào phiên bản của assembly mà chúng được xây dựng để dựa vào.Một lỗi tiếp xúc trong assembly đó bởi một ứng dụng có thể không bao giờ xuất hiện trong các ứng dụng khác, bởi vì chúng đang sử dụng assembly khác nhau, vì vậy hãy để chúng lại và bạn sẽ không phải kiểm tra hồi quy 5 ứng dụng riêng biệt mỗi khi DLL được chia sẻ của bạn bị vá .

+0

Vâng, không gian đĩa không thực sự là mối quan tâm của tôi :) Tôi đánh giá cao sự trung thực của câu trả lời của bạn nhưng tôi phải tranh luận rằng nếu hai người tiêu dùng mã chia sẻ thể hiện hành vi khác nhau nhưng chính xác thì có dấu hỏi về sự phân tách chức năng. Tôi nghĩ rằng tôi thấy mọi thứ theo cách khác - nếu tôi làm cho mình trở thành một lập trình viên tốt hơn, QED, tôi viết các chương trình tốt hơn. –

+0

Tôi muốn nói chắc chắn có một sự cân bằng, tuy nhiên. Có, bạn muốn trở thành một lập trình viên tốt hơn, và trở thành một lập trình viên tốt hơn sẽ giúp bạn viết các chương trình tốt hơn, nhưng có những cách tốt hơn để trở thành một lập trình viên tốt hơn so với các tổ hợp nấu áp lực trong sản xuất. –

+0

Tôi không chắc là tôi hiểu thuật ngữ "nấu ăn áp lực" của bạn. Tôi đồng ý hoàn toàn với sự cần thiết cho một cách tiếp cận cân bằng và thực dụng. Vấn đề là có vẻ như câu trả lời của bạn và của người khác đối với câu hỏi GAC có thể được diễn giải (và tôi chỉ làm điều này để tối quan tâm của tôi - không phải để khinh thường ý kiến ​​của bạn) là "chúng tôi nghĩ GAC là một ý tưởng hay nhưng chúng tôi muốn tránh chi phí làm cho mã của chúng tôi làm việc vui vẻ với nó. " Đó là một cái nhìn khá dễ chịu về sự phát triển để trình bày trong những phản ứng chăn mền. Tôi muốn biết những rủi ro cụ thể và làm cho tâm trí của riêng tôi lên. Nêu tôi sai vui long chân chỉnh tôi. –

0

Tôi sử dụng theo chiến lược yếu.
Sử dụng GAC - khi các chương trình khác nhau sử dụng phiên bản chia sẻ + phiên bản.
Không sử dụng GAC - luôn luôn.

mọi nhận xét đều được chào đón.

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