Próbuję zakończyć ten program obsługi wyjątków:
if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null)
{
string pathOfActiveConfigFile = ...?
throw new ConfigurationErrorsException(
"You either forgot to set the connection string, or " +
"you're using a unit test framework that looks for "+
"the config file in strange places, update this file : "
+ pathOfActiveConfigFile);
}
Wydaje się, że ten problem występuje tylko wtedy, gdy używam nUnit.
c#
.net
nunit
app-config
configurationmanager
MatthewMartin
źródło
źródło
Ściśle mówiąc, nie ma jednego pliku konfiguracyjnego. Oprócz ASP.NET 1 mogą istnieć trzy pliki konfiguracyjne korzystające z obsługi inbuilt (
System.Configuration
). Oprócz konfiguracji komputera:app.exe.config
mobilny użytkownik i lokalny użytkownik.Aby uzyskać konfigurację „globalną” ( exe .config):
Użyj różnych
ConfigurationUserLevel
wartości dla plików konfiguracyjnych mobilnych i niemobilnych według użycia.1 Który ma zupełnie inny model, w którym zawartość folderów podrzędnych (wirtualnych IIS lub systemu plików)
web.config
może (w zależności od ustawienia) dodać lub zastąpić folder nadrzędnyweb.config
.źródło
Jeśli masz na myśli, że zwracasz wartość null tylko wtedy, gdy używasz NUnit, prawdopodobnie będziesz musiał skopiować wartość ConnectionString z pliku app.config swojej aplikacji do pliku app.config w bibliotece testów.
Gdy jest uruchamiany przez moduł ładujący test, zestaw testowy jest ładowany w czasie wykonywania i będzie wyglądał we własnym pliku app.config (zmienionym na testAssembly.dll.config w czasie kompilacji), a nie w pliku konfiguracyjnym aplikacji.
Aby uzyskać lokalizację uruchamianego zestawu, spróbuj
źródło
Upewnij się, że klikasz właściwości pliku i ustawisz go na „zawsze kopiuj”, w przeciwnym razie nie będzie go w folderze Debug \ z twoją szczęśliwą biblioteką DLL, aby skonfigurować miejsce, w którym ma być i dodać więcej dzwonków
źródło
Kiedy po raz pierwszy zdałem sobie sprawę, że projekt testów jednostkowych odwoływał się do app.config w tym projekcie, a nie do app.config powiązanego z moim projektem kodu produkcyjnego (oczywiście, DOH), właśnie dodałem wiersz w zdarzeniu po kompilacji projektu Prod który skopiuje plik app.config do folderu bin projektu testowego.
Problem rozwiązany
Jak dotąd nie zauważyłem żadnych dziwnych skutków ubocznych, ale nie jestem pewien, czy to jest właściwe rozwiązanie, ale przynajmniej wydaje się, że działa.
źródło
Brakuje tu jeszcze jednej opcji, którą widziałem:
źródło
W zależności od lokalizacji pliku konfiguracyjnego
System.Reflection.Assembly.GetExecutingAssembly().Location
może zrobić to, czego potrzebujesz.źródło
Wypróbowałem jedną z poprzednich odpowiedzi w aplikacji internetowej (właściwie rola sieci Web platformy Azure działająca lokalnie) i nie do końca działała. Jednak to podobne podejście zadziałało:
Plik konfiguracyjny okazał się być w C: \ Program Files \ IIS Express \ MyComponent.dll.config. Ciekawe miejsce na to.
źródło