這是我的問題。我想在運行時將庫加載到我的應用程序中。這將允許應用程序消耗接口的新實現而不需要重新編譯。應用程序將搜索它自己的目錄中的庫。我有這樣的代碼:確定服務器或客戶端上的應用程序執行目錄
var path = Assembly.GetExecutingAssembly().Location;
path = Path.GetDirectoryName(path);
path = Path.Combine(path, "<my assembly>.dll");
var assembly = Assembly.LoadFile(path);
此代碼在單元測試中完美工作。但是,該應用程序是一個Web應用程序。當我將這段代碼作爲應用程序的一部分運行時,Assembly.GetExecutingAssembly().Location
在.net框架中返回一個臨時目錄。 (C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ ...)我大概可以通過使用Server.MapPath
來解決這個問題,但是代碼將不再是單元可測試的。
我真的很想找到能夠以平臺無關的方式給我執行目錄的東西,也就是說,它在單元測試和Web應用程序中搜索正確的目錄。
我已經試過:
Assembly.GetExecutingAssembly().Location //Works as a test but not on a server
Application.ExecutablePath //Not an executable, so this won't work
System.AppDomain.CurrentDomain.BaseDirectory //Almost works in web app, but stops too early in the directory structure
Environment.CurrentDirectory //returns system32 directory
GetCallingAssembly也當爲一個Web應用程序運行返回.NET Framework中的目錄。 – SouthShoreAK