c# - AppDomain.DynamicDirectory 未生成

标签 c# appdomain vstest.console.exe appdomainsetup

我正在使用以下代码创建一个 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 中执行会改变 App Domains 行为的原因可能是什么。有解决办法吗。

最佳答案

解决方案

检查 AppDomain.CurrentDomain.FriendlyName 是否包含非法字符,例如冒号 (:)。如果是,您应该使用 SO 问题 How to remove illegal characters from path and filenames? 中讨论的方法之一清理 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

快速浏览 reference source of 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 显然违反了该规则。

关于c# - AppDomain.DynamicDirectory 未生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160044/

相关文章:

c# - 如何从内部具有多个类的类创建数据库

c# - AppDomain.Unload() 如何中止线程?

vstest.console.exe 列出带有 FullQualifiedName 的测试

jenkins - 为什么 vstest.console.exe 突然给我一个关于隔离模式的警告?

c# - 无法使用异步/等待连接到异步服务器

c# - 建立和使用Scintilla.NET的问题

c# - 有什么方法可以配置初始 AppDomain 吗?

c# - 从程序集中强制卸载 DLL

visual-studio - 如何离线安装 vstest.console.exe

c# - 子弹不会向前移动,而是停留在枪的位置