В составе одной из моих DLL присутствует функционал, позволяющий проверять на предмет корректности выражения вида ACAD-E001:409 (а так же создавать их) и, если выражение корректно, то полностью расшифровывать эту информацию. Для работы обозначенной DLL необходим специальный XML файл, содержащий информацию о существующих версиях AutoCAD и их вертикальных продуктах. Этот файл размещается в том же каталоге, в котором находится DLL. Для тестирования обозначенного функционала я написал пару тестов и запустил их в GUI NUnit…

Код моей DLL находит нужный XML следующим образом:

String asmLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly(
  ).Location);

// xml file with AutoCAD products data.
String xmlFile = Path.Combine(asmLocation, "cad.data.xml");
if (!File.Exists(xmlFile)) {
  throw new FileNotFoundException(xmlFile);
}

Результаты компиляции размещены в каталоге «C:\Users\developer\Documents\Visual Studio 2013\Projects\cad-solution\cad.UnitTests\bin\Debug«. Запустив тесты на исполнение я увидел, что все они с треском провалились:

В правом верхнем текстбоксе читаю сгенерированное моим кодом сообщение об ошибке:

Bushman.CAD.UnitTests.Tests.LocalizedProduct_TryParse_Check_BoolValue(null,False):
System.TypeInitializationException : Инициализатор типа «Bushman.CAD.LocalizedProduct» выдал исключение.
  —-> System.IO.FileNotFoundException : C:\Users\developer\AppData\Local\Temp\nunit20\ShadowCopyCache\5128_635702471073123992\Tests_27930185\assembly\dl3\7e84bc6f\b85de2a2_d6a9d001\cad.data.xml

Я подсветил красным цветом ключевую информацию. Это исключение происходит потому, что NUnit копирует тестируемую DLL в произвольно сгенерированный каталог и уже оттуда загружает её и запускает присутствующие в ней тесты. Но скопировав DLL, NUnit не сделал того же самого и для моего XML файла, в виду чего и происходит обозначенное исключение. Обозначенное поведение в NUnit называется Shadow Copy (Теневое Копирование).

Shadow Copy можно включать или отключать в настройках NUnit: меню Tools -> Settings… -> Test Loader -> Advanced -> Shadow Copy -> Enable Shadow Copy:

Обратите внимание на информацию, которую я выделил красным цветом.

Если обозначенную галочку снять, то после перезапуска NUnit теневое копирование не происходит и DLL загружается из того каталога, где она изначально находилась. Соответственно успешно находится и XML файл: