2012-06-27 70 views
10

được, đây là câu hỏi. Tôi có hai dự án một là C# Console và khác là thư viện Class. Tôi đang truy cập/gọi phương thức thư viện Lớp từ ứng dụng bảng điều khiển. Có một thư mục có tên Tệp trong dự án thư viện lớp.Cách lấy đường dẫn Thư mục Dự án Hiện tại bằng C#

tôi cần phải lấy đường dẫn của thư mục file thư viện lớp, nhưng bất cứ khi nào tôi sử dụng

System.IO.Directory.GetCurrentDirectory(); 

Environment.CurrentDirectory; 

nó đem lại cho tôi con đường của dự án Bảng điều khiển mà tôi đang sử dụng để gọi phương pháp.

phương pháp trên đều đem lại cho tôi con đường như

C:\\ConsolePro\\bin\\Debug 

nhưng tôi cần con đường của dự án thư viện lớp

C:\\ClassLibPro\\bin\\Debug 

Xin cho biết

+2

FYI bạn sẽ không bao giờ nhận được đường dẫn của thư mục dll như Visua l Studio sẽ sao chép các phụ thuộc từ vị trí ban đầu của chúng (ClassLibPro) vào thư mục bin/debug của dự án của bạn (Console Pro). Không có cách nào để theo dõi trở lại này trong thời gian chạy. – tsells

+0

Tại sao bạn cần đường dẫn của dự án? –

Trả lời

3

Tôi tin rằng vấn đề là:

Kể từ khi dự án điều khiển có các tập tin DLL tham khảo nó được sử dụng DLL để gọi bất kỳ phương pháp. Tại thời điểm này, nó trả về thư mục DLL của thư viện lớp projct nằm trong thư mục bin của dự án bàn điều khiển và nó không biết về vị trí vật lý của dự án thư viện lớp.

về cơ bản, nó đang quay trở lại cùng một đường dẫn dự án. Tôi sẽ phải di chuyển cả hai dự án trong cùng một thư mục để giải quyết vấn đề này.

1

Bạn sẽ có thể sử dụng Directory.GetParent(Directory.GetCurrentDirectory()) một vài lần để có được các thư mục cấp cao hơn và sau đó thêm đường dẫn của thư mục lib vào cuối thư mục đó.

+0

Không, đây không phải là câu trả lời. Tôi cần phải biết làm thế nào tôi có thể nhận được đường dẫn của dự án hiện tại nơi tập tin của tôi nằm. Vui lòng đọc lại câu hỏi! – Learner

3

Nếu bạn tải thư viện lớp từ một hội đồng khác.

string Path = System.Reflection.Assembly.GetAssembly(typeof({LibraryClassName})).Location; 

string PathToClassLibPro = Path.GetDirectoryName(Path); 

Thay thế {LibraryClassName} bằng tên lớp thư viện của bạn.

+0

Tính năng này không hoạt động. Đường dẫn đến như là DLL mà nằm trong dự án giao diện điều khiển. – Learner

+0

Cách xác định loại lắp ráp tại vị trí của {assembly}. Tôi đang sử dụng như thế này chuỗi Path = System.Reflection.Assembly.GetExecutingAssembly(). – Learner

+0

Tôi đã sử dụng tên lớp và nó cũng không hoạt động! – Learner

7

Khi mã được biên dịch và chạy, 'Đường dẫn dự án' không có ý nghĩa. Tất cả những gì bạn có thể xác định là các vị trí tập tin của các assembly được biên dịch. Và bạn chỉ có thể làm những gì bạn đang hỏi nếu dự án giao diện điều khiển của bạn tham khảo trực tiếp DLL thư viện lớp được xây dựng, thay vì thông qua một tham chiếu dự án.

Sau đó, bạn có thể sử dụng Reflection để nhận các đường dẫn Assembly như;

string path = Assembly.GetAssembly(typeof (SomeClassInOtherProject)).Location; 
+0

Xin lỗi, Mã này không hoạt động – Learner

0

Tôi muốn giới thiệu một trong hai tùy chọn.

  1. Nếu các tập tin nhỏ bao gồm chúng trong thư viện lớp và dòng họ đến một vị trí tạm thời khi cần thiết

  2. tùy chọn khác là để sao chép các tập tin trong xây dựng vào thư mục đầu ra và sử dụng chúng mà đường. Trong trường hợp của nhiều dự án được chia sẻ, tốt nhất là nên có một thư mục bin chung mà bạn sao chép các assembly và chạy từ vị trí đó.

2

Tôi hy vọng tôi hiểu u corretly:

Path.GetDirectoryName(typeof(Foo.MyFooClass).Assembly.Location); 
0

Mặc dù tôi không thể tìm thấy một giải pháp tốt tôi sử dụng thủ thuật này: chừng nào bạn muốn quay trở lại con đường lý tưởng của bạn u nên thêm Directory.GetParent() thay vì ...

Directory.GetParent(...(Directory.GetParent(Directory.GetCurrentDirectory()).ToString()...).ToString() 
Các vấn đề liên quan