1

存储机器特定配置文件的正确位置在哪里。该文件会不时更改,并且需要任何用户都可以访问(因此每台机器一个配置)。我不想修改 app.config,因为它会在新版本中被覆盖并且由于许可原因。该文件将在第一次启动时创建,并保留在任何新版本中。问候

4

1 回答 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 回答