2011-02-09 34 views
7

Tôi có một giải pháp với nhiều dự án mà tất cả các dll đầu ra (ngoại trừ ứng dụng chính của khóa học). Sao chép địa phương được đặt thành true cho tất cả các tài liệu tham khảo và mọi thứ đều tốt và dandy với dlls trong cùng thư mục với exe.Đặt C# Dự án tham khảo trong một thư mục con

Vấn đề của tôi là điều này thật xấu. Tôi muốn đặt tất cả các dll trong một thư mục con (thực sự là hai thư mục con xuống được chính xác). Làm thế nào tôi có thể làm điều này trong Visual Studio 2008?

Tôi đã tìm thấy một số câu hỏi có vẻ tương tự nhưng tôi không thể tìm thấy câu trả lời đơn giản mà tôi biết phải tồn tại.

EDIT: Để rõ ràng hơn, tôi muốn biết cách làm cho trình tải lắp ráp tìm kiếm các tham chiếu ở đâu đó bên cạnh thư mục hoạt động. Người dùng sẽ tương tác với một số tệp khác trong thư mục và ít lộn xộn hơn cho họ.

CHỈNH SỬA 2: Tôi cũng muốn tránh sử dụng GAC. Ứng dụng cần phải được tự chứa.

+0

Nhưng sau đó chúng sẽ được tải như thế nào? Bạn sẽ phải tải từng DLL một cách thủ công, điều đó chỉ hút thôi. Và nếu bạn đã làm như vậy, bạn lạnh không tham khảo các dự án - bạn không thể chỉ đơn giản là sử dụng các loại trong chúng. Tổng số overkill và não nổ. –

+0

Lý tưởng nhất là có một số cách trong VS để làm cho ứng dụng tìm kiếm tất cả các phụ thuộc ở đâu đó bên cạnh thư mục hoạt động. Tôi không thể tưởng tượng được điều đó thật khó. – daedalus28

Trả lời

2

Hoặc AssemblyResolve

public static class AssemblyResolver { 
    static AssemblyResolver() { 
     AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(delegate(object sender, ResolveEventArgs args) { 
      return Assembly.LoadFrom(...); 
     }); 
    } 
} 
+0

ah thực sự đây là cách không dùng nữa để làm điều đó :) – daedalus28

0

Bạn không thể đặt các tham chiếu đó vào thư mục con. Vì chúng sẽ không bị "nhìn thấy" bởi thời gian chạy của ứng dụng của bạn.

Vị trí đầu tiên để đặt chúng nằm trong thư mục gỡ lỗi của bạn, sau đó trong Bộ đệm ẩn toàn cục (còn gọi là GAC). Lưu ý rằng những gì bạn thấy trong tab (.Net) trong hộp thoại Add Reference thực sự là các tham chiếu trong thư mục GAC.

Lưu ý: Nếu bạn sử dụng TFS làm điều khiển nguồn phụ trợ, hãy chú ý rằng tham chiếu không được sao chép vào kho kiểm soát nguồn khi bạn thực hiện đăng ký, thay vào đó bạn phải sao chép thủ công.

4

Bạn đã thử không gian tên AppDomain chưa?

AppDomain.CurrentDomain.AppendPrivatePath

http://www.vcskicks.com/csharp_assembly.php

+0

Điều này làm việc đẹp !!! – daedalus28

+0

Chỉ có một vấn đề - Visual Studio cảnh báo rằng nó không được chấp nhận. Bất kỳ lời khuyên nào về việc sử dụng giải pháp thay thế mới hơn? Khi nó đứng, ứng dụng đang chạy tốt – daedalus28

+0

PrivateBinPath? – djeeg

0

tôi chỉ công bố một bài viết mà giải thích tất cả những thông tin chi tiết. Partitioning Your Code Base Through .NET Assemblies and Visual Studio Project

Dưới đây là những hướng dẫn kết quả của bài báo:

  • Giảm đáng kể số lượng lắp ráp của cơ sở mã của bạn.
  • Tạo một hội đồng mới chỉ khi điều này được chứng minh bằng một yêu cầu cụ thể cho việc tách vật lý.
  • Trong dự án Visual Studio, hãy sử dụng ‘tham chiếu theo assembly’ thay vì ‘tham chiếu bởi dự án Visual Studio’.
  • Không bao giờ sử dụng tùy chọn tham chiếu Visual Studio ‘Sao chép địa phương = True’.
  • Đặt tất cả các giải pháp VS và Xây dựng các tệp hành động .bat trong thư mục $ rootDir $.
  • Biên dịch tất cả các hội đồng trong thư mục: $ rootDir $ \ bin \ Debug và $ rootDir $ \ bin \ Release
  • Sử dụng thư mục $ rootDir $ \ bin để lưu trữ các bài kiểm tra.
1

Sử dụng ứng dụng.config <probing> phần tử để hướng dẫn .NET Runtime để tìm trong các thư mục con để định vị các assembly bổ sung. Xem here.

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