不会生成 AppDomain.DynamicDirectory



我正在使用以下代码创建一个应用程序域

String pa = @"C:UsersuserAppDataLocalTemp2db5fjamk.xnl";
System.IO.Directory.CreateDirectory(pa);
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory; //f:projectpathoutdebug-i386-unittestUnitTests
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 https://msdn.microsoft.com/en-us/library/system.appdomain.dynamicdirectory(v=vs.110(.aspx明确表示使用了AppDomainSetup.DynamicBase。

在 vstest.console 中执行.exe更改应用程序域行为的原因可能是什么。有没有解决方法。

解决方案

检查AppDomain.CurrentDomain.FriendlyName是否包含冒号 (:)( 等非法字符。如果是,您应该使用SO问题如何从路径和文件名中删除非法字符中讨论的方法之一对setup.ApplicationName进行消毒。

背景

当我调试测试时,我得到了一个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 的引用源(这是堆栈跟踪中出现的最后一个方法(显示,如果返回 true,它会引发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明显违反了该规则。

相关内容

  • 没有找到相关文章

最新更新