Tôi tạo ra một ứng dụng giao diện điều khiển đơn giản với đoạn mã sau:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);
tôi sao chép thực thi dẫn đến C:\temp2
. Sau đó tôi đặt một phím tắt cho tập tin thực thi đó trong C:\temp3
và chạy nó (một lần từ bản thân exe và một lần từ phím tắt). Nó đã cho các kết quả sau cả hai lần:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Trong khi tôi chắc chắn phải có một lý do nào cockamamie để giải thích lý do tại sao có những năm phương pháp khác nhau mà làm hầu như chính xác những điều đó, tôi chắc chắn don' Tôi biết nó là gì. Tuy nhiên, nó sẽ xuất hiện trong hầu hết các trường hợp, bạn được tự do lựa chọn cái nào bạn ưa thích.
CẬP NHẬT: Tôi đã sửa đổi thuộc tính Shortcut, thay đổi trường "Bắt đầu trong:" thành C:\temp3
. Điều này dẫn đến kết quả như sau:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
... mà chứng tỏ ít nhất một số của sự phân biệt giữa các phương pháp khác nhau.
GetEntryAssembly() và GetExecutingAssembly() có một sự khác biệt thú vị. Để biết chi tiết, hãy tham khảo http://stackoverflow.com/a/18562036/30289 – bhadra
Như tôi đã nói: Điều này trả về tên đường dẫn nơi * hiện đang thực thi assembly * cư trú. Sự khác biệt giữa 'GetEntryAssembly' và' GetExecutingAssembly' không có nhiều bất ngờ, cũng rõ ràng bởi tên hàm. Nếu họ làm như vậy, tại sao nên có hai chức năng? :-) –
+1 Assembly.GetEntryAssembly() đã giúp tôi trong trường hợp chạy ứng dụng thông qua clickonce – Artiom