我正在.NET 4 中创建一个应用程序,它需要在应用程序运行时更新应用程序的配置。执行此操作的代码如下:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["MySetting"].Value = "my value";
config.Save();
我的 App.Config 看起来像这样......
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="MySetting" value="my old value"/>
</appSettings>
</configuration>
当我在本地驱动器上运行此应用程序时(因此,当程序运行时配置文件也将位于本地驱动器上),则此代码有效。但是,如果应用程序在网络共享(实际上是 Z:) 上使用配置文件运行,则代码将失败,并在行上出现以下异常config.Save();...
System.InvalidOperationException 未处理
消息=方法失败,出现意外错误代码 1。
源=mscorlib
堆栈跟踪:
在 System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType,布尔 isContainer,字符串名称,SafeHandle 句柄,AccessControlSections includeSections,布尔 createByName,ExceptionFromErrorCode exceptionFromErrorCode,对象 exceptionContext)
在 System.Security.AccessControl.FileSystemSecurity..ctor(布尔 isContainer,字符串名称,AccessControlSections includeSections,布尔 isDirectory)
在 System.Security.AccessControl.FileSecurity..ctor(字符串文件名,AccessControlSections includeSections)
在 System.Configuration.Internal.WriteFileContext.DuplicateTemplateAttributes(字符串源,字符串目标)
在 System.Configuration.Internal.WriteFileContext.DuplicateFileAttributes(字符串源,字符串目标)
在 System.Configuration.Internal.WriteFileContext.Complete(字符串文件名,布尔成功)
在 System.Configuration.Internal.InternalConfigHost.StaticWriteCompleted(字符串流名称,布尔成功,对象 writeContext,布尔 assertPermissions)
在 System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.WriteCompleted(字符串流名称,布尔成功,对象 writeContext,布尔断言权限)
在 System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.IInternalConfigHost.WriteCompleted(字符串流名,布尔成功,对象 writeContext)
在 System.Configuration.Internal.DelegatingConfigHost.WriteCompleted(字符串流名,布尔成功,对象 writeContext)
在 System.Configuration.UpdateConfigHost.WriteCompleted(字符串流名称,布尔成功,对象 writeContext)
在 System.Configuration.MgmtConfigurationRecord.SaveAs(字符串文件名,ConfigurationSaveMode saveMode,布尔 forceUpdateAll)
在 System.Configuration.Configuration.SaveAsImpl(字符串文件名,ConfigurationSaveMode saveMode,布尔 forceSaveAll)
在 System.Configuration.Configuration.Save()
在 Z:\repos\project\MyProj\Program.cs:line 61 中的 MyProj.Program.Main()
在 System.AppDomain._nExecuteAssembly(RuntimeAssembly 程序集,字符串 [] 参数)
在 System.AppDomain.nExecuteAssembly(RuntimeAssembly 程序集,字符串 [] 参数)
在 System.Runtime.Hosting.ManifestRunner.Run(布尔 checkAptModel)
在 System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
在 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext,字符串 [] activationCustomData)
在 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext 激活上下文)
在 System.Activator.CreateInstance(ActivationContext 激活上下文)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔 ignoreSyncCtx)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态)
在 System.Threading.ThreadHelper.ThreadStart()
内部异常:
我认为这是.NET 的某种安全问题,但我不确定如何禁用该安全性。
存储配置文件的网络共享实际上是一个 VirtualBox 共享驱动器。主机系统是 linux,共享驱动器映射到 Ext4 文件系统。
我不相信这只是一个文件系统写入问题,因为我可以成功写入与我的 App.config 文件位于同一目录中的文本文件(至少我认为它是同一目录,除非 .NET 在后面做了一些时髦的事情像使用临时目录这样的场景)。
File.WriteAllText("Text.txt", "Testing");