存储机器特定配置文件的正确位置在哪里。该文件会不时更改,并且需要任何用户都可以访问(因此每台机器一个配置)。我不想修改 app.config,因为它会在新版本中被覆盖并且由于许可原因。该文件将在第一次启动时创建,并保留在任何新版本中。问候
问问题
213 次
1 回答
1
.NET 框架已经使用了一个机器配置文件,其中包含由在该机器上运行的所有 .NET 应用程序共享的设置,但听起来不像您正在寻找的。
如果您不需要应用程序能够对配置文件进行修改,那么我想说最简单的方法是将设置存储在可执行文件夹中的 XML 文件中。您可以轻松地从当前目录加载应用程序中的设置。您可以将文件命名为任何您想要的名称。
但是,如果您需要从应用程序中修改配置文件,那么我不建议这样做,因为并非每个用户都具有写入应用程序文件夹中文件所需的权限。因此,如果是这种情况,我建议将配置文件存储在隔离存储中。
当您更改应用程序的版本号时,隔离存储可能会变得有点棘手,以确保您的存储不会“丢失”。当您想要存储可从机器上运行的任何应用程序访问的设置时,它会变得更加棘手。过去,我需要制作一个独立的存储,供一套软件中的多个应用程序共享,因此我编写了以下类,该类非常适用:
Public Class LocalStorage
Implements ILocalStorage
Private Const _CompanyUrl As String = "http://www.mycompany.com"
Public Function Read(Of T)(ByVal fileName As String) As T
Dim contents As T = Nothing
Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
Try
Using stream As Stream = New IsolatedStorageFileStream(fileName, FileMode.Open, FileAccess.Read, GetStorage())
Using xmlReader As XmlReader = New XmlTextReader(stream)
contents = CType(serializer.Deserialize(xmlReader), T)
End Using
End Using
Catch ex As FileNotFoundException
Catch ex As Exception
Throw New IOException("Failed to read from " + fileName + " in local isolated storage", ex)
End Try
Return contents
End Function
Public Sub Write(Of T)(ByVal fileName As String, ByVal serializableDataObject As T)
Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
Try
Using stream As Stream = New IsolatedStorageFileStream(fileName, FileMode.Create, FileAccess.Write, GetStorage())
Using xmlTextWriter As XmlTextWriter = New XmlTextWriter(stream, New UTF8Encoding(False))
xmlTextWriter.Formatting = Formatting.Indented
Dim namespaces As XmlSerializerNamespaces = New XmlSerializerNamespaces()
namespaces.Add("", "")
serializer.Serialize(xmlTextWriter, serializableDataObject, namespaces)
End Using
End Using
Catch ex As Exception
Throw New IOException("Failed to write to " & fileName & " in local isolated storage", ex)
End Try
End Sub
Private Function GetStorage() As IsolatedStorageFile
Return IsolatedStorageFile.GetStore(IsolatedStorageScope.Machine Or IsolatedStorageScope.Assembly, Nothing, New Url(_CompanyUrl))
End Function
End Class
于 2013-02-07T13:42:34.860 回答