2012-10-18 17 views
5

Używam testu CodedUI, który odwołuje się do biblioteki DLL i ta biblioteka DLL przekształca coś w rodzaju pliku "config". Podczas uruchamiania testu obecny katalog zwraca jeden gdzie CodedUI umieszcza pliki wyniki testów jakie używaneJak rozwiązać bieżący katalog podczas pracy z kodowanym interfejsem użytkownika

AppDomain.CurrentDomain.BaseDirectory 

i

System.Reflection.Assembly.GetExecutingAssembly().CodeBase 

i

System.Reflection.Assembly.GetExecutingAssembly().Location 

Wszystkie one dają mi takie same ścieżka

Potrzebuję ścieżki, w której znajduje się biblioteka DLL, ponieważ tam właśnie znajduje się plik konfiguracyjny le zostanie zbudowany.

Lokalizacja, w której to się zmieni, jeśli jestem debugowany lub jeśli właśnie uruchamiam test (oczywiście), więc nie mogę tego użyć i nawigować wstecz lub coś w tym stylu.

Czy istnieją inne sposoby uzyskania lokalizacji biblioteki DLL, do której się odwołujesz?

Edit:

ja przedstawieniu ten plik konfiguracyjny od wewnątrz DLL, że jestem odwołującego.

+0

każde ostateczne rozwiązanie z pełnym kodem źródłowym? – Kiquenet

Odpowiedz

3

Do tej pory jedyne miejsce, w którym znalazłem oryginalną ścieżkę do biblioteki testowej jest w prywatnej zmiennej w kontekście testu. Skończyło się na użyciu refleksji, aby uzyskać wartość i sprawić, by była użyteczna.

using System.Reflection; 
    using Microsoft.VisualStudio.TestTools.UnitTesting; 
    public static string CodeBase(
     TestContext testContext) 
    { 
     System.Type t = testContext.GetType(); 
     FieldInfo field = t.GetField("m_test", BindingFlags.NonPublic | BindingFlags.Instance); 
     object fieldValue = field.GetValue(testContext); 
     t = fieldValue.GetType(); 
     PropertyInfo property = fieldValue.GetType().GetProperty("CodeBase"); 
     return (string)property.GetValue(fieldValue, null); 
    } 

użyłem tego, aby uzyskać ścieżkę do biblioteki DLL, która jest coraz bieg i używać, aby następnie uruchomić aplikację, że wiem, jest kompilowany do tej samej lokalizacji jako test został przy ul.

Jeśli ktokolwiek znajdzie lepszy sposób na uzyskanie tego, daj mi znać.

+0

Po prostu zaimplementowałem zasoby osadzone, aby wykonać to samo zadanie, ale to jest świetne! Zastanawiam się, dlaczego Microsoft zdecydował się wdrożyć testy w taki sposób ... –

+0

Po prostu chcę, aby wszyscy wiedzieli, kto tego używa, zwrócona ścieżka jest zazwyczaj twoją lokalizacją kompilacji i jeśli jesteś w trakcie uruchamiania testu, który używa ścieżki zwróconej z tego i próbujesz zrobić nową kompilację w tym samym czasie , pliki zostaną zablokowane podczas ich uruchamiania i możesz spowodować, że test się nie powiedzie lub kompilacja zakończy się niepowodzeniem lub obu. –

1

Najlepszym sposobem uzyskania katalogu, w którym została załadowana dana biblioteka DLL, jest użycie następującego typu zdefiniowanego w tym zestawie.

var type = typeof(TypeInThatAssembly); 
var path = Path.GetDirectory(type.Location); 

CodeBase i Location nieruchomość często wracają te same informacje, ale są bardzo różne

  • kodzie: Zawiera lokalizację dla zespołu, jak to zostało odniesione podczas obciążenia
  • Położenie: To gdzie zespół został faktycznie załadowany z dysku

Mogą to być różne aplikacje, które korzystają z funkcji shadow cop ied zespołów (Asp.Net, xUnit, itp.)

+0

Dziękuję za sugestię, ale to daje mi tę samą ścieżkę, co pozostałe dwie funkcje. Być może będę musiał wyjaśnić więcej. –

+0

Powód, dla którego to nie działa, polega na tym, że jest on kopiowany, a następnie ładowany, a nie w inny sposób. –

Powiązane problemy