2016-01-17 55 views
5

Tôi có một ứng dụng web ASP.NET bao gồm nhiều dự án ASP.NET (ngoài các thư viện nhiều lớp). Rõ ràng một trong những dự án là dự án gốc trong khi phần còn lại là các dự án con (khái niệm chi tiết về cấu trúc ứng dụng này được giải thích here). Mỗi dự án con/con có thư mục riêng và tất cả chúng đều nằm trong một thư mục mà tôi gọi là "Mô-đun" trong thư mục gốc. Vì IIS có thể xử lý một dự án cho mỗi ứng dụng, tất cả các dự án con sẽ được coi là các thư mục thông thường (khi chạy). Vì vậy, tôi đã sửa đổi đường dẫn đầu ra xây dựng cho từng dự án con thành "..\..\bin\" là thư mục bin gốc. Bằng cách đó, tôi có mọi thứ được thiết lập chính xác. Từ quan điểm Visual Studio, tôi có sự sang trọng của việc có các dự án khác nhau theo một giải pháp. Và từ quan điểm IIS, tôi có một dự án với một thư mục bin và một Tệp cấu hình Web. Bây giờ nó xuất bản. Nếu tôi xuất bản dự án gốc (bằng cách nhấp chuột phải vào nút dự án -> xuất bản) kết quả được xuất bản sẽ là dự án đó mà không có thư mục "Mô-đun". Các thư mục bin kết quả cũng sẽ bỏ lỡ các dự án phụ dlls dự án. Và đó là mong đợi. Vì vậy, tôi nghĩ rằng cách rõ ràng để khắc phục vấn đề này là xuất bản tất cả các dự án web của tôi (không chỉ root), lưu ý rằng các dự án con của tôi xuất bản đường dẫn cần phải là thư mục "Mô-đun" trong đường dẫn xuất bản của dự án gốc. Tất cả những điều đó đều hiệu quả ngoại trừ một vấn đề quan trọng. Nó bật ra rằng mỗi dự án tiểu xuất bản có thư mục bin riêng của mình và do đó thư mục bin gốc không chứa các DLL đầu ra của các dự án phụ. Vì vậy, tôi đã tìm ra, trong khi Visual Studio cho phép tôi chỉ định đường dẫn đầu ra của từng dự án theo cách tôi muốn (như tôi đã đề cập đến "..\..\bin\"), việc xuất bản ClickOnce không tôn trọng và chỉ tạo thư mục bin cho mỗi dự án phụ . Có cách nào để xác định đường dẫn đầu ra (thư mục bin) của thủ tục xuất bản ClickOnce không? Nếu không, đâu là giải pháp thay thế?Xuất bản ứng dụng web với nhiều dự án

Trả lời

1

Như bạn đã nói bạn có nhiều projects và một là dự án gốc. Vì vậy, mọi dự án phải có thư mục bin riêng vì nó là project không phải là sub folder của root project.

Nếu sub project sẽ không có thư mục bin cách thư sẽ biết từ vị trí cần tải assemblies được sử dụng trong đó project.

Không phải là ý tưởng tồi khi có thư mục bin cho mỗi phụ project.

+0

Từ liên kết tôi đưa vào câu hỏi. xin vui lòng kiểm tra phần này hy vọng rằng sẽ làm cho trường hợp của tôi rõ ràng hơn. 'Sau khi bạn cấu hình các dự án con để chia sẻ một thư mục gốc ứng dụng IIS phổ biến, bạn có thể chia sẻ tài nguyên giữa các dự án trong giải pháp. Ví dụ: bạn có thể kéo điều khiển người dùng từ dự án tài nguyên được chia sẻ vào tệp .aspx trong một dự án khác. Lưu ý rằng bạn chỉ có thể làm điều này sau khi bạn cấu hình các dự án để chia sẻ một gốc ứng dụng IIS phổ biến. Visual Studio .NET không cho phép bạn chia sẻ tài nguyên nếu các dự án vẫn còn trong thư mục gốc ứng dụng IIS riêng biệt.' – yazanpro

+0

Vì vậy, từ quan điểm IIS, tôi sẽ chỉ có một dự án. Và về mặt kỹ thuật, các dự án con sẽ tải các assembly của chúng từ thư mục bin gốc (tôi đã thiết lập đường dẫn đầu ra của tất cả các dự án con của tôi thành '.. \ .. \ bin', đó là thư mục bin gốc. – yazanpro

1

Câu trả lời được cung cấp here có thể giải quyết vấn đề của bạn. Bằng cách thêm vào các thuộc tính sau vào tập tin .csproj của bạn (sửa đổi từ câu trả lời liên quan), bạn có thể thông báo cho ClickOnce để bao gồm nội dung bổ sung trong thư mục đầu ra:

<ItemGroup> 
    <Content Include="bin\**\*.*" /> 
</ItemGroup> 

Một câu trả lời cho here cung cấp một cách đệ quy bao gồm nội dung bổ sung vào của bạn đầu ra của dự án nằm ngoài thư mục dự án của bạn, có thể áp dụng ở đây; từ quan điểm của dự án gốc, các dự án khác nằm ngoài thư mục của nó. Tuy nhiên, tôi không chắc liệu ClickOnce có bỏ qua điều này hay không.

<Content Include="..\..\MyContentFiles\**"> 
    <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</Content> 
+0

Tôi chưa có cơ hội để kiểm tra giải pháp của bạn nhưng tôi tin rằng nó hữu ích. Tôi sẽ đánh dấu là câu trả lời nếu làm việc. – yazanpro

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