2010-03-31 29 views
11

Tôi muốn cập nhật một thư viện lớp (một tệp DLL duy nhất) trong một ứng dụng web sản xuất. Ứng dụng web này được biên dịch trước (xuất bản). Tôi đọc một câu trả lời trên StackOverflow (xin lỗi, dường như không thể tìm thấy nó nữa vì chức năng Tìm kiếm không hoạt động tốt), điều đó khiến tôi tin rằng tôi có thể dán DLL mới vào thư mục bin và nó sẽ được chọn lên mà không có vấn đề (điều này sẽ gây ra WP để tái chế, đó là tốt với tôi bởi vì chúng tôi không sử dụng trạng thái phiên InProc).Cập nhật một DLL trong thư mục bin của trang Web sản xuất ASP.NET

Tuy nhiên, khi tôi thử điều này, trang web của tôi thổi lên và đưa ra một FileLoadException nói rằng định nghĩa tệp kê khai không khớp với tham chiếu assembly. Thế giới này có gì?! Cập nhật các DLL trong Visual Studio và tái triển khai toàn bộ trang web hoạt động tốt, nhưng nó là một nỗi đau rất lớn ở phía sau. Điểm của việc có một DLL riêng biệt là gì nếu bạn phải triển khai lại toàn bộ trang web để thực hiện bất kỳ thay đổi nào?

Đây là câu hỏi: Làm cách nào để cập nhật DLL trên trang web sản xuất mà không vi phạm ứng dụng và không triển khai lại tất cả các tệp?

+0

Đây là "trang web" trong Visual Studio, tiện thể. Không chắc liệu điều đó có tạo nên sự khác biệt hay không. –

Trả lời

9

Điều cần nhớ là có các trang webcác ứng dụng web theo như Visual Studio và ASPNET được xem xét.

Trang web thường có tất cả các tệp aspx và vb được xuất bản lên máy chủ trực tiếp và quá trình ASPNET Worker biên dịch lại ứng dụng mỗi lần trước khi trình bày. Trên đầu kia là ứng dụng web, nơi tất cả các mã của bạn đằng sau các tệp được biên dịch thành một tệp DLL duy nhất và bạn chỉ cần triển khai các trang aspx và thư mục bin của bạn với tệp DLL để sản xuất.

Ngoài ra còn có một "lai" được gọi là "Precompiled Web Sites" (xem liên kết cho tổng quan MSDN chính thức) nơi bạn không có bố cục DLL đơn của ứng dụng web, nhưng tất cả công việc biên dịch của trang web là đã làm cho bạn. Có một số "chế độ" này tùy thuộc vào nhu cầu của bạn.

Dường như với tôi rằng lỗi của bạn là do trang web của bạn được thiết lập dưới dạng trang web với một số loại biên dịch sẵn tại chỗ. Sử dụng mô hình được biên dịch trước là một chút "nghiêm ngặt" trong đó là giả định một số tập tin/chữ ký được đặt ra. Có một phiên bản cập nhật của các tập tin DLL gây ra một break kể từ khi biên dịch trước muốn một tên và một phiên bản của tập tin.

Nếu có thể, đặt cược tốt nhất của bạn sẽ là chuyển đổi sang ứng dụng web, vì bạn có thể thêm các DLL bổ sung vào sản xuất mà không gặp sự cố. Nếu không, hãy xem this matrix để xem hình thức biên dịch trước nào bạn cần cho đơn đăng ký của mình.

+0

+1 Cảm ơn, đây là câu trả lời hay. Tôi vẫn còn hơi bối rối về quá trình chuyển đổi ứng dụng web. Chính xác những gì liên quan đến "chuyển đổi sang một ứng dụng web"? Cảm ơn một lần nữa! –

+0

Bạn có thể nhấp chuột phải vào tệp dự án và chọn "Chuyển đổi sang ứng dụng web" và nó sẽ thực hiện quy trình cho bạn. –

+0

Tôi không có tùy chọn "Chuyển đổi sang ứng dụng web" trong trình đơn ngữ cảnh trình khám phá giải pháp của mình. Tôi có phiên bản chuyên nghiệp VS2008. Tôi không mù, nó đơn giản là không có! Có một số loại tiện ích mà tôi cần cho việc này không? Cảm ơn. –

1

Hãy xem bài đăng SO này, có thể là những gì bạn đang đề cập đến. The located assembly's manifest definition does not match the assembly reference

+0

Đó không phải là một. Nó có một câu trả lời cho biết một cái gì đó để có hiệu lực của "Có chỉ cần thả yuor DLL mới trong thư mục bin và nó sẽ tái chế các hồ bơi ứng dụng và nhận được chọn." Đó là một câu trả lời được chấp nhận và đã được bình chọn một vài lần. Tôi để lại một bình luận về câu trả lời về FileLoadException. –

0

Hãy xem tham chiếu của bạn. Liệu nó có nói "phiên bản cụ thể = đúng" không? Đặt nó thành false, tái xuất bản ứng dụng của bạn (bạn phải làm điều đó một lần, bởi vì bây giờ ứng dụng của bạn vẫn đang tìm kiếm một hội đồng với một tệp kê khai cụ thể) và thử lại.

+0

Tôi tìm thấy "phiên bản cụ thể" này ở đâu? –

+0

Trong thuộc tính tham chiếu. Mở rộng tài liệu tham khảo, nhấp chuột phải vào tham chiếu cụ thể, nhấp vào thuộc tính. –

+0

Tôi không thể tìm thấy những gì bạn đang nói về.Đây là một trang web, không phải là một ứng dụng web. –

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