Ist es möglich, My.Settings.SomeString
Wert einer Zielanwendung von einer anderen Anwendung programmgesteuert zu ändern?Wie ändert man den UserSettings-Wert einer App aus einer anderen App mit VB.Net?
Beispiel
Ist es möglich, My.Settings.SomeString
Wert einer Zielanwendung von einer anderen Anwendung programmgesteuert zu ändern?Wie ändert man den UserSettings-Wert einer App aus einer anderen App mit VB.Net?
Beispiel
Ja, das ist möglich.
Die My.Settings Konfigurationen in einer Datei gespeichert werden, die an der folgenden Position befinden:
C: \ Benutzer \ [your_username] \ AppData \ Local \ [App Verleger] \ [Name der Anwendung] \ [App Version #] \ Benutzer.config
Ich bin sicher, dass Sie das XML der Datei user.config für die Zielanwendung programmgesteuert in Ihre Anwendung laden, anpassen und dann speichern können.
Beim Öffnen der Zielanwendung würde die Datei user.config wie normal geladen und alle Änderungen, die Sie am XML vorgenommen haben, würden wiedergegeben.
Die Einstellungen werden in XML gespeichert. Standardmäßig heißt die Datei Settings.settings und befindet sich in Project Directory\My Project
.
In Ihrem Beispiel + eine andere Einstellung, könnte die Datei wie diese
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings"
CurrentProfile="(Default)" GeneratedClassNamespace="My"
GeneratedClassName="MySettings" UseMySettingsClassName="true">
<Profiles />
<Settings>
<Setting Name="SomeString" Type="System.String" Scope="User">
<Value Profile="(Default)">This is some string</Value>
</Setting>
<Setting Name="SomeOtherString" Type="System.String" Scope="User">
<Value Profile="(Default)">This is some other string</Value>
</Setting>
</Settings>
</SettingsFile>
sehen Sie können generate vb.net classes from the XML wenn Sie VS 2012 oder neuer. Ich habe das gemacht, und hier sind die generierten Klassen. (Wenn Sie nicht mindestens VS 2012 haben, können Sie weiterhin Microsofts XML Schema Definition Tool verwenden).
<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings"), _
System.Xml.Serialization.XmlRootAttribute([Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings", IsNullable:=False)> _
Partial Public Class SettingsFile
Private profilesField As Object
Private settingsField() As SettingsFileSetting
Private currentProfileField As String
Private generatedClassNamespaceField As String
Private generatedClassNameField As String
Private useMySettingsClassNameField As Boolean
Public Property Profiles() As Object
Get
Return Me.profilesField
End Get
Set(value As Object)
Me.profilesField = value
End Set
End Property
<System.Xml.Serialization.XmlArrayItemAttribute("Setting", IsNullable:=False)> _
Public Property Settings() As SettingsFileSetting()
Get
Return Me.settingsField
End Get
Set(value As SettingsFileSetting())
Me.settingsField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property CurrentProfile() As String
Get
Return Me.currentProfileField
End Get
Set(value As String)
Me.currentProfileField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property GeneratedClassNamespace() As String
Get
Return Me.generatedClassNamespaceField
End Get
Set(value As String)
Me.generatedClassNamespaceField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property GeneratedClassName() As String
Get
Return Me.generatedClassNameField
End Get
Set(value As String)
Me.generatedClassNameField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property UseMySettingsClassName() As Boolean
Get
Return Me.useMySettingsClassNameField
End Get
Set(value As Boolean)
Me.useMySettingsClassNameField = value
End Set
End Property
End Class
<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings")> _
Partial Public Class SettingsFileSetting
Private valueField As SettingsFileSettingValue
Private nameField As String
Private typeField As String
Private scopeField As String
Public Property Value() As SettingsFileSettingValue
Get
Return Me.valueField
End Get
Set(value As SettingsFileSettingValue)
Me.valueField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Name() As String
Get
Return Me.nameField
End Get
Set(value As String)
Me.nameField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Type() As String
Get
Return Me.typeField
End Get
Set(value As String)
Me.typeField = value
End Set
End Property
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Scope() As String
Get
Return Me.scopeField
End Get
Set(value As String)
Me.scopeField = value
End Set
End Property
End Class
<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings")> _
Partial Public Class SettingsFileSettingValue
Private profileField As String
Private valueField As String
<System.Xml.Serialization.XmlAttributeAttribute()> _
Public Property Profile() As String
Get
Return Me.profileField
End Get
Set(value As String)
Me.profileField = value
End Set
End Property
<System.Xml.Serialization.XmlTextAttribute()> _
Public Property Value() As String
Get
Return Me.valueField
End Get
Set(value As String)
Me.valueField = value
End Set
End Property
End Class
Mit diesen Klassen können Sie die XML-Einstellungsdatei serialisiert und deserialisiert. Natürlich können Sie in die Einstellungsdatei mit XML-Serialisierung lesen und schreiben.
Diese Komplettlösung zeigt, wie eine Einstellung
' define the path to the settings file
Dim settingsPath = "C:\Users\username\AppData\Local\Temporary Projects\ConsoleApplication1\My Project\Settings.settings"
Dim serializer As New XmlSerializer(GetType(SettingsFile))
Sub Main()
Dim settingsObject As SettingsFile
' open the settings file for reading
Using sr As New StreamReader(settingsPath) ' deserialize the xml file to the settings object
settingsObject = CType(serializer.Deserialize(sr), SettingsFile)
End Using
Console.WriteLine("Available settings:") ' display the available settings
Console.WriteLine(
String.Join(Environment.NewLine, settingsObject.Settings.Select(
Function(s) String.Format("{0}: '{1}'", s.Name, s.Value.Value))))
Console.WriteLine("Enter a setting name to be modified...")
Dim settingNameToBeModified = Console.ReadLine()
Dim settingToBeModified =
settingsObject.Settings.
Where(Function(s) s.Name.ToUpper() = settingNameToBeModified.ToUpper()).Single()
Console.WriteLine(
"Enter a new value for {0} (old value: '{1}')",
settingToBeModified.Name, settingToBeModified.Value.Value)
Dim newValue = Console.ReadLine()
If EditSetting(settingToBeModified, newValue) Then
Console.WriteLine("Saved new setting!")
Else
Console.WriteLine("Couldn't find setting '{0}'", settingNameToBeModified)
End If
Console.WriteLine("Press enter to exit")
Console.ReadLine()
End Sub
Public Function EditSetting(settingObject As SettingsFileSetting, newValue As String)
Try
Console.WriteLine(
"Enter a new value for {0} (old value: '{1}')",
settingObject.Name, settingObject.Value.Value)
settingObject.Value.Value = newValue
Using sr As New StreamWriter(settingsPath) ' open the settings file again, for writing
serializer.Serialize(sr, settingObject) ' serialize the settings object to the xml file
End Using
Console.WriteLine("Saved new setting!")
Catch
Return False
End Try
End Function
App-Einstellungen ausgelegt sind, so bearbeiten, dass eine App nur seine Einstellungen geladen werden kann, so dass Sie nicht in der Lage sein, es durch 'My.Setings' zu tun. Es kann auch durch die Bereitstellungsmethode (XCopy vs OneClick) kompliziert sein. Für gemeinsam genutzte Suite-Konfigurationen können Sie Daten selbst speichern, so dass andere Apps (nicht nur Ihre) auf sie zugreifen können. – Plutonix
Können Sie es ein wenig klarer machen ... nur ein paar Teile von dem, was Sie gesagt haben ... :(#MyBad –
Und bitte fügen Sie diese einfache Antwort mit Ihrer Erklärung ... (Ja, wenn möglich und Nein, wenn nicht) –