2013-05-28 29 views
6

Tôi có giao diện hay không, hãy gọi nó là ILocateLogFile, với triển khai chuẩn cho máy chủ dev/beta/production và một máy chỉ hoạt động trong môi trường phát triển địa phương. Tôi dường như không thể nghĩ ra một cách tốt đẹp để quyết định (tốt nhất là lúc biên dịch, nhưng thời gian chạy sẽ ổn) nếu tôi đang chạy cục bộ hoặc trên một máy chủ. Đây là một ứng dụng WCF được lưu trữ trên IIS, nếu có vấn đề.Làm cách nào để biết mã có chạy cục bộ từ Visual Studio/Cassini

Điều tốt nhất tôi đã đi lên với là sử dụng một biểu tượng trình biên dịch, một cái gì đó như:

ILocateLogFile locateLogFile; 
#if DEBUG 
    locateLogFile = new DevSandboxLogFileLocator(); 
#else 
    locateLogFile = new LogFileLocator(); 
#endif 

Vấn đề là, biên dịch những biểu tượng được thiết lập bằng cách xây dựng, mà tôi không kiểm soát, và tôi muốn chắc chắn. Không phải là có một số cách tự động để kiểm tra sự hiện diện của Visual Studio? Hoặc ít nhất là để kiểm tra cho Cassini chứ không phải là IIS?

+0

Tôi đã thấy điều này được giải quyết trước bằng cách kiểm tra các biến tên máy chủ trong một tuyên bố else if. – RandomUs1r

+1

Bất kỳ lý do nào không sử dụng tệp .config để định cấu hình ghi nhật ký? (có thể bạn đã có .config khác nhau cho mỗi môi trường, vì vậy có thể là tầm thường để thêm đăng nhập quá). –

+0

@ RandomUs1r đó là một gợi ý tốt, nhưng tôi không thể sử dụng 'System.Web.HttpContext' vì dịch vụ WCF của tôi không sử dụng tính tương thích ASP.Net ... – McGarnagle

Trả lời

8

Hai cách tôi đã làm điều này 1 bạn có thể kiểm tra tên quá trình

bool isRunningInIisExpress = Process.GetCurrentProcess() 
           .ProcessName.ToLower().Contains("iisexpress"); 

Hoặc cập nhật tập tin cấu hình của bạn với một thiết

<appSettings> 
    <add key="ApplicationEnvironment" value="LOCAL_DEV" /> 
</appSettings> 

tùy chỉnh đó bạn cập nhật cụ thể cho từng môi trường và có bạn truy vấn ứng dụng cho

Tôi không chắc liệu có cách nào để xác định điều này tại thời gian biên dịch hay không, ngoài việc có cấu hình xây dựng đặc biệt dành cho mỗi envi ronment và đặt một tùy chỉnh PRAGMA cho mỗi bản dựng này. Cá nhân tôi nghĩ rằng đó không phải là thanh lịch, nhưng nó cũng có thể làm việc.

+0

Cảm ơn, tôi nghĩ rằng tùy chọn đầu tiên là chính xác những gì tôi đang tìm kiếm - mặc dù, tên quá trình của tôi có vẻ là "WebDev.WebServer40" chứ không phải là "iisexpress". – McGarnagle

+0

Điều đó có ý nghĩa nếu bạn đang sử dụng xây dựng trong máy chủ phát triển. Bạn có thể muốn suy nghĩ về việc chuyển sang IIS Express. Tôi đã tìm thấy nó là cách mạnh mẽ hơn và được xây dựng vào VS 2012/2010 SP1. – jstromwick

-2

Đây là mã tôi đã sử dụng

If Debugger.IsAttached Then 
' Since there is a debugger attached, 
' assume we are running from the IDE 
Else 
' Assume we aren't running from the IDE 
End If 
Các vấn đề liên quan