存储计算机专用配置文件的正确位置在哪里。文件不时变化,任何用户都需要访问它(每台机器一个配置)。我不想修改app.config,因为它会因为许可原因而被新版本覆盖。 该文件将在首次启动时创建,并保留在任何新版本中。 此致
答案 0 :(得分: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