AppDomain.DynamicDirectory не создается

Я создаю AppDomain, используя приведенный ниже код

String pa = @"C:\Users\user\AppData\Local\Temp\2\db5fjamk.xnl";
System.IO.Directory.CreateDirectory(pa);
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; //f:\projectpath\out\debug-i386-unittest\UnitTests
setup.ApplicationName = string.Concat(AppDomain.CurrentDomain.FriendlyName, DateTime.UtcNow.Ticks); //UnitTestAdapter: Running test636559691791186101
setup.DynamicBase = pa;
Evidence evidence = AppDomain.CurrentDomain.Evidence;
_Domain = AppDomain.CreateDomain(setup.ApplicationName, evidence, setup);

Но свойство _Domain.DynamicDirectory не существует. https://msdn.microsoft.com/en-us/library/system.appdomain.dynamicdirectory(v=vs.110).aspx четко говорит, что используется AppDomainSetup.DynamicBase.

Причиной выполнения vstest.console.exe может быть изменение поведения доменов приложений. Есть ли работа вокруг.

1 ответ

Решение

Решение

Проверьте, если AppDomain.CurrentDomain.FriendlyName содержит недопустимые символы, такие как двоеточие (:). Если да, вы должны продезинфицировать setup.ApplicationName с одним из методов, обсуждаемых в вопросе SO Как удалить недопустимые символы из пути и имен файлов?,

Фон

Когда я отладил тест, я получил System.NotSupportedException с сообщением The given path's format is not supported.,

Трассировка стека была

at System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
at System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, String fullPath, Boolean checkForDuplicates, Boolean needFullPath)
at System.AppDomain.get_DynamicDirectory()
at System.AppDomain.get_DynamicDirectory()
at SO_AppDomain.Sut.Method() in <path>\Program.cs:line 30
at UnitTestProject1.UnitTest1.TestMethod1() in <path>\UnitTest1.cs:line 14

И значение AppDomain.CurrentDomain.FriendlyName было TestSourceHost: Enumering assembly,

Беглый взгляд на справочный источник EmulateFileIOPermissionChecks - который является последним методом, который появляется в трассировке стека - показал, что он выбрасывает NotSupportedException если PathInternal.HasInvalidVolumeSeparator возвращает истину. Этот метод содержит следующий комментарий:

 // Toss out paths with colons that aren't a valid drive specifier.
 // Cannot start with a colon and can only be of the form "C:" or "\\?\C:".

Строка TestSourceHost: Enumering assembly явно нарушает это правило.

Другие вопросы по тегам