From cd30d1197afaeda5fb1e2982a806ec76a174b03f Mon Sep 17 00:00:00 2001
From: KernalsEgg <52105649+KernalsEgg@users.noreply.github.com>
Date: Fri, 14 Oct 2022 18:26:40 +1030
Subject: [PATCH] Compare against any number of IDANames.txt files
- Update to version 2b distributed on the SkyrimSE RE Discord server
- Update to .NET Framework 4.8 from .NET Framework 4.5.2
- Added support for comparing against any number of IDANames.txt files
---
AddressLibraryManager.csproj | 4 +-
App.config | 6 +-
Form1.Designer.cs | 13 +
Form1.cs | 484 ++++++++++++++++++++++---------
Properties/Resources.Designer.cs | 44 ++-
Properties/Settings.Designer.cs | 22 +-
6 files changed, 388 insertions(+), 185 deletions(-)
diff --git a/AddressLibraryManager.csproj b/AddressLibraryManager.csproj
index 088652f..f670fb9 100644
--- a/AddressLibraryManager.csproj
+++ b/AddressLibraryManager.csproj
@@ -9,9 +9,10 @@
Properties
AddressLibraryManager
AddressLibraryManager
- v4.5.2
+ v4.8
512
true
+
AnyCPU
@@ -90,6 +91,7 @@
True
Resources.resx
+ True
SelectVersionForm.cs
diff --git a/App.config b/App.config
index 88fa402..4bfa005 100644
--- a/App.config
+++ b/App.config
@@ -1,6 +1,6 @@
-
+
-
+
-
\ No newline at end of file
+
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
index 94b5af3..7591833 100644
--- a/Form1.Designer.cs
+++ b/Form1.Designer.cs
@@ -62,6 +62,7 @@ private void InitializeComponent()
this.button9 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
+ this.button12 = new System.Windows.Forms.Button();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
@@ -252,6 +253,7 @@ private void InitializeComponent()
//
// groupBox2
//
+ this.groupBox2.Controls.Add(this.button12);
this.groupBox2.Controls.Add(this.button11);
this.groupBox2.Controls.Add(this.button10);
this.groupBox2.Controls.Add(this.button9);
@@ -415,6 +417,16 @@ private void InitializeComponent()
this.button11.UseVisualStyleBackColor = true;
this.button11.Click += new System.EventHandler(this.button11_Click);
//
+ // button12
+ //
+ this.button12.Location = new System.Drawing.Point(6, 135);
+ this.button12.Name = "button12";
+ this.button12.Size = new System.Drawing.Size(337, 23);
+ this.button12.TabIndex = 14;
+ this.button12.Text = "Export names to IDA 7.x";
+ this.button12.UseVisualStyleBackColor = true;
+ this.button12.Click += new System.EventHandler(this.button12_Click);
+ //
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -480,6 +492,7 @@ private void InitializeComponent()
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button11;
+ private System.Windows.Forms.Button button12;
}
}
diff --git a/Form1.cs b/Form1.cs
index 90084fc..abae159 100644
--- a/Form1.cs
+++ b/Form1.cs
@@ -1125,112 +1125,196 @@ private void textBox5_TextChanged(object sender, EventArgs e)
this.MarkModified(1);
}
+ internal const char AddressPlaceholderSymbol = '*';
+ internal const string AddressPlaceholderString = "*";
+
+ private static string PreProcessNameFromIDA(string n, long addr)
+ {
+ if (string.IsNullOrEmpty(n))
+ return n;
+
+ string hex = addr.ToString("X");
+ if (n.Length > hex.Length && n.EndsWith(hex, StringComparison.OrdinalIgnoreCase))
+ {
+ n = n.Substring(0, n.Length - hex.Length);
+ n = n + AddressPlaceholderString;
+ }
+
+ return n;
+ }
+
+ private static string PreProcessNameToIDA(string n, long addr)
+ {
+ if (string.IsNullOrEmpty(n))
+ return n;
+
+ int ix;
+ while((ix = n.IndexOf('*')) >= 0)
+ {
+ n = n.Remove(ix, 1);
+ n = n.Insert(ix, addr.ToString("X"));
+ }
+
+ return n;
+ }
+
private void button8_Click(object sender, EventArgs e)
{
- if(Manager.CurrentDatabase == null)
+ if (Manager.CurrentDatabase == null)
{
- MessageBox.Show("Must load a database first!");
+ MessageBox.Show("A database must be loaded!");
+
return;
}
- if(Manager.CurrentDatabase.Versions == null || Manager.CurrentDatabase.Versions.Count == 0)
+ if (Manager.CurrentDatabase.Versions == null || Manager.CurrentDatabase.Versions.Count == 0)
{
- MessageBox.Show("Can't import names, there are no library versions created!");
+ MessageBox.Show("A library version must be created to import names!");
+
return;
}
- var ver = AskVersion(Manager.CurrentDatabase.Versions.Keys, "Select version of IDA database");
- if (!ver.HasValue)
+ var version = AskVersion(Manager.CurrentDatabase.Versions.Keys, "Select the version of the IDA database");
+
+ if (!version.HasValue)
+ {
return;
+ }
- Library lib;
- if(!Manager.CurrentDatabase.Versions.TryGetValue(ver.Value, out lib))
+ Library library;
+
+ if (!Manager.CurrentDatabase.Versions.TryGetValue(version.Value, out library))
{
MessageBox.Show("Something went wrong.");
+
return;
}
- var of = new OpenFileDialog();
- of.AddExtension = true;
- of.DefaultExt = "txt";
- of.CheckFileExists = true;
- of.Title = "Select idanames.txt";
+ var existingNamesList = GetExistingNames();
- var r = of.ShowDialog();
- if (r != DialogResult.OK)
+ var openFileDialogue = new OpenFileDialog();
+ openFileDialogue.AddExtension = true;
+ openFileDialogue.DefaultExt = "txt";
+ openFileDialogue.CheckFileExists = true;
+ openFileDialogue.Title = "Select idanames.txt";
+
+ var openFileDialogueResult = openFileDialogue.ShowDialog();
+
+ if (openFileDialogueResult != DialogResult.OK)
+ {
return;
+ }
try
{
- var map = Manager.CurrentDatabase.Names;
- if (map == null)
- map = new SortedDictionary();
+ var idNameDictionary = Manager.CurrentDatabase.Names;
+
+ if (idNameDictionary == null)
+ {
+ idNameDictionary = new SortedDictionary();
+ }
int missingId = 0;
int changedId = 0;
- Dictionary revv = new Dictionary();
- if(lib.Values != null)
+
+ var offsetIdDictionary = new Dictionary();
+
+ if (library.Values != null)
{
- foreach (var pair in lib.Values)
- revv[pair.Value] = pair.Key;
+ foreach (var idOffsetPair in library.Values)
+ {
+ offsetIdDictionary[idOffsetPair.Value] = idOffsetPair.Key;
+ }
}
- var fi = new System.IO.FileInfo(of.FileName);
- using (var f = new System.IO.StreamReader(fi.FullName))
+
+ var fileInfo = new System.IO.FileInfo(openFileDialogue.FileName);
+
+ using (var streamReader = new System.IO.StreamReader(fileInfo.FullName))
{
- string l;
- int nr = 0;
- while((l = f.ReadLine()) != null)
+ string line;
+ int lineNumber = 0;
+
+ while ((line = streamReader.ReadLine()) != null)
{
- nr++;
- if (l.Length == 0)
+ lineNumber++;
+
+ if (line.Length == 0)
+ {
continue;
+ }
+
+ var splitLine = line.Split(new[] { '\t' }, StringSplitOptions.None);
+
+ if (splitLine.Length != 3)
+ {
+ throw new FormatException("Invalid format on line " + lineNumber + ": " + line);
+ }
+
+ long address;
- var spl = l.Split(new[] { '\t' }, StringSplitOptions.None);
- if(spl.Length != 3)
- throw new FormatException("Invalid format on line " + nr + ": " + l);
+ if (!long.TryParse(splitLine[0], System.Globalization.NumberStyles.AllowHexSpecifier, null, out address))
+ {
+ throw new FormatException("Invalid format on line " + lineNumber + ": " + line);
+ }
- long addr;
- if(!long.TryParse(spl[0], System.Globalization.NumberStyles.AllowHexSpecifier, null, out addr))
- throw new FormatException("Invalid format on line " + nr + ": " + l);
+ long offset = address - library.BaseAddress;
- long offset = addr - lib.BaseAddress;
if (offset < 0 || offset > 0x40000000)
- throw new FormatException("Bad address on line " + nr + ": " + addr);
+ {
+ throw new FormatException("Address out of bounds on line " + lineNumber + ": " + address);
+ }
ulong id;
- revv.TryGetValue((uint)offset, out id);
+ offsetIdDictionary.TryGetValue((uint)offset, out id);
- if(id == 0)
+ if (id == 0)
{
missingId++;
+
+ continue;
+ }
+
+ string name = splitLine[1];
+ //if (!string.IsNullOrEmpty(splitLine[2])) { name = splitLine[2]; }
+ name = PreProcessNameFromIDA(name, address);
+
+ if (IsExistingName(existingNamesList, id, name))
+ {
continue;
}
- string n = spl[1];
- //if (!string.IsNullOrEmpty(spl[2])) n = spl[2];
- string prev;
- if(!map.TryGetValue(id, out prev) || prev != n)
+ string previousName;
+
+ if (!idNameDictionary.TryGetValue(id, out previousName) || previousName != name)
{
- map[id] = n;
+ idNameDictionary[id] = name;
changedId++;
}
}
}
- if(changedId > 0)
+ if (changedId > 0)
+ {
this.MarkModified(2);
+ }
- if (map.Count != 0)
- Manager.CurrentDatabase.Names = map;
+ if (idNameDictionary.Count != 0)
+ {
+ Manager.CurrentDatabase.Names = idNameDictionary;
+ }
+
+ string missingIdErrorMessage = "";
- string errorc = "";
if (missingId > 0)
- errorc = string.Format(" Unable to edit {0} names because the IDs were missing!", missingId);
- MessageBox.Show("Modified " + changedId + " names." + errorc);
+ {
+ missingIdErrorMessage = " Unable to edit " + missingId + " names because the IDs were missing!";
+ }
+
+ MessageBox.Show("Modified " + changedId + " names." + missingIdErrorMessage);
}
- catch(Exception ex)
+ catch (Exception exception)
{
- ReportError(ex);
+ ReportError(exception);
}
}
@@ -1261,155 +1345,271 @@ private void button10_Click(object sender, EventArgs e)
Manager.CurrentDatabase.Names = all;
this.MarkModified(2);
}
-
- private void WriteIDANames(bool ida7)
+
+ private List> GetExistingNames()
{
- if (Manager.CurrentDatabase == null)
+ List> existingNamesList = null;
+
+ var messageBoxResult = MessageBox.Show(
+ "Do you only want to write names that have changed? If so, names will be compared against the base idanames.txt files provided for each version in the Names subdirectory.",
+ "Question",
+ MessageBoxButtons.YesNo);
+
+ if (messageBoxResult != DialogResult.Yes)
{
- MessageBox.Show("You must load the database first!");
- return;
+ return existingNamesList;
}
- if (Manager.CurrentDatabase.Names == null || Manager.CurrentDatabase.Names.Count == 0)
+ existingNamesList = new List>();
+
+ var namesDirectory = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "Names");
+
+ if (!System.IO.Directory.Exists(namesDirectory))
{
- MessageBox.Show("There are no names defined, nothing to export.");
- return;
+ return existingNamesList;
}
- if (Manager.CurrentDatabase.Versions == null || Manager.CurrentDatabase.Versions.Count == 0)
+ foreach (var version in Manager.CurrentDatabase.Versions)
{
- MessageBox.Show("There are no versions defined, unable to calculate offsets!");
- return;
+ var versionDirectory = System.IO.Path.Combine(namesDirectory, version.Key.ToString());
+
+ if (!System.IO.Directory.Exists(versionDirectory))
+ {
+ continue;
+ }
+
+ var library = version.Value;
+ var offsetIdDictionary = new Dictionary();
+
+ if (library.Values != null)
+ {
+ foreach (var idOffsetPair in library.Values)
+ {
+ offsetIdDictionary[idOffsetPair.Value] = idOffsetPair.Key;
+ }
+ }
+
+ foreach (var fileName in System.IO.Directory.GetFiles(versionDirectory))
+ {
+ if (!System.IO.Path.GetExtension(fileName).Equals(".txt", StringComparison.OrdinalIgnoreCase))
+ {
+ continue;
+ }
+
+ try
+ {
+ var existingNames = new Dictionary();
+
+ using (var streamReader = new System.IO.StreamReader(fileName))
+ {
+ string line;
+
+ while ((line = streamReader.ReadLine()) != null)
+ {
+ if (line.Length == 0)
+ {
+ continue;
+ }
+
+ var splitLine = line.Split(new[] { '\t' }, StringSplitOptions.None);
+
+ if (splitLine.Length != 3)
+ {
+ continue;
+ }
+
+ long address;
+
+ if (!long.TryParse(splitLine[0], System.Globalization.NumberStyles.AllowHexSpecifier, null, out address))
+ {
+ continue;
+ }
+
+ long offset = address - library.BaseAddress;
+
+ if (offset < 0 || offset > 0x40000000)
+ {
+ continue;
+ }
+
+ ulong id;
+ offsetIdDictionary.TryGetValue((uint)offset, out id);
+
+ if (id == 0)
+ {
+ continue;
+ }
+
+ string name = splitLine[1];
+ //if (!string.IsNullOrEmpty(splitLine[2])) { name = splitLine[2]; }
+ name = PreProcessNameFromIDA(name, address);
+
+ if (!string.IsNullOrEmpty(name))
+ {
+ existingNames[id] = name;
+ }
+ }
+ }
+
+ existingNamesList.Add(existingNames);
+ }
+ catch (Exception exception)
+ {
+ ReportError(exception);
+ }
+ }
}
- var ver = AskVersion(Manager.CurrentDatabase.Versions.Keys, "Select version in IDA");
- if (!ver.HasValue)
- return;
+ return existingNamesList;
+ }
- Library lib;
- if (!Manager.CurrentDatabase.Versions.TryGetValue(ver.Value, out lib))
+ private bool IsExistingName(List> existingNamesList, ulong id, string name)
+ {
+ if (existingNamesList != null)
{
- MessageBox.Show("Something went wrong.");
- return;
+ foreach (var existingNames in existingNamesList)
+ {
+ if (existingNames != null)
+ {
+ string existingName;
+
+ if (existingNames.TryGetValue(id, out existingName) && existingName == name)
+ {
+ return true;
+ }
+ }
+ }
}
- if (lib.Values == null || lib.Values.Count == 0)
+ return false;
+ }
+
+ private void WriteIDANames(bool ida7)
+ {
+ if (Manager.CurrentDatabase == null)
{
- MessageBox.Show("That version doesn't have any offsets defined, unable to export!");
+ MessageBox.Show("A database must be loaded!");
+
return;
}
- var onlyChanged = MessageBox.Show("Do you only want to write names that have changed? If you click yes then you will be asked for idanames.txt file, and only names that are different from that file will be exported.", "Question", MessageBoxButtons.YesNoCancel);
- if (onlyChanged == DialogResult.Cancel)
+ if (Manager.CurrentDatabase.Names == null || Manager.CurrentDatabase.Names.Count == 0)
+ {
+ MessageBox.Show("No names are defined to export!");
+
return;
+ }
- Dictionary already = null;
- if (onlyChanged == DialogResult.Yes)
+ if (Manager.CurrentDatabase.Versions == null || Manager.CurrentDatabase.Versions.Count == 0)
{
- already = new Dictionary();
+ MessageBox.Show("A library version must be created to export names!");
- var of = new OpenFileDialog();
- of.AddExtension = true;
- of.DefaultExt = "txt";
- of.CheckFileExists = true;
- of.Title = "Select idanames.txt";
+ return;
+ }
- var r = of.ShowDialog();
- if (r != DialogResult.OK)
- return;
+ var version = AskVersion(Manager.CurrentDatabase.Versions.Keys, "Select the version of the IDA database");
- try
- {
- using (var swp = new System.IO.StreamReader(of.FileName))
- {
- string l;
- while ((l = swp.ReadLine()) != null)
- {
- if (l.Length == 0)
- continue;
+ if (!version.HasValue)
+ {
+ return;
+ }
- var spl = l.Split(new[] { '\t' }, StringSplitOptions.None);
- if (spl.Length != 3)
- continue;
+ Library library;
- long addr;
- if (!long.TryParse(spl[0], System.Globalization.NumberStyles.AllowHexSpecifier, null, out addr))
- continue;
+ if (!Manager.CurrentDatabase.Versions.TryGetValue(version.Value, out library))
+ {
+ MessageBox.Show("Something went wrong.");
- string n = spl[1];
- //if (!string.IsNullOrEmpty(spl[2])) n = spl[2];
+ return;
+ }
- if (!string.IsNullOrEmpty(n))
- already[addr] = n;
- }
- }
- }
- catch (Exception ex)
- {
- ReportError(ex);
- }
+ if (library.Values == null || library.Values.Count == 0)
+ {
+ MessageBox.Show("No offsets are defined to export!");
+
+ return;
}
+ var existingNamesList = GetExistingNames();
+
try
{
int missingId = 0;
int writeId = 0;
- var fi = new System.IO.FileInfo("SetNamesInIDA.py");
- using (var sw = new System.IO.StreamWriter(fi.FullName, false, new UTF8Encoding(false)))
+ var fileInfo = new System.IO.FileInfo("SetNamesInIDA.py");
+
+ using (var streamWriter = new System.IO.StreamWriter(fileInfo.FullName, false, new UTF8Encoding(false)))
{
- sw.WriteLine("def NameAddr(ea, name):");
+ streamWriter.WriteLine("def NameAddr(ea, name):");
+
if (!ida7)
- sw.WriteLine(" idc.MakeName(ea, name)");
+ {
+ streamWriter.WriteLine(" idc.MakeName(ea, name)");
+ }
else
- sw.WriteLine(" idc.set_name(ea, name, SN_CHECK)");
- sw.WriteLine();
- sw.WriteLine("print \"Importing names...\"");
- sw.WriteLine();
- foreach (var pair in Manager.CurrentDatabase.Names)
{
- string n = (pair.Value ?? "");
- if (n.Length == 0)
+ streamWriter.WriteLine(" idc.set_name(ea, name, SN_CHECK)");
+ }
+
+ streamWriter.WriteLine();
+ streamWriter.WriteLine("print (\"Importing names...\")");
+ streamWriter.WriteLine();
+
+ foreach (var idNamePair in Manager.CurrentDatabase.Names)
+ {
+ string name = (idNamePair.Value ?? "");
+
+ if (name.Length == 0)
+ {
continue;
+ }
uint offset;
- if (!lib.Values.TryGetValue(pair.Key, out offset))
+
+ if (!library.Values.TryGetValue(idNamePair.Key, out offset))
{
missingId++;
+
continue;
}
- long addr = lib.BaseAddress + offset;
- if (already != null)
+ if (IsExistingName(existingNamesList, idNamePair.Key, name))
{
- string prev;
- if (already.TryGetValue(addr, out prev) && prev == n)
- continue;
+ continue;
}
- n = n.Replace("\"", "\\\"");
+ long address = library.BaseAddress + offset;
+
+ name = PreProcessNameToIDA(name, address);
+ name = name.Replace("\"", "\\\"");
+
+ streamWriter.Write("NameAddr(0x");
+ streamWriter.Write(address.ToString("X"));
+ streamWriter.Write(", \"");
+ streamWriter.Write(name);
+ streamWriter.Write("\")");
+ streamWriter.WriteLine();
- sw.Write("NameAddr(0x");
- sw.Write(addr.ToString("X"));
- sw.Write(", \"");
- sw.Write(n);
- sw.Write("\")");
- sw.WriteLine();
writeId++;
}
- sw.WriteLine();
- sw.WriteLine("print \"Done with name import\"");
+ streamWriter.WriteLine();
+ streamWriter.WriteLine("print (\"Done with name import\")");
}
- string stats = "Wrote " + writeId + " renames.";
+ string statistics = writeId + " names have been written.";
+
if (missingId > 0)
- stats += " Failed to write " + missingId + " because the IDs were not found.";
- MessageBox.Show(stats + Environment.NewLine + "Wrote file " + fi.Name + " to " + fi.DirectoryName + "!" + Environment.NewLine + "Run this as a script file in IDA.");
+ {
+ statistics += " Failed to write " + missingId + " names because their IDs were not found.";
+ }
+
+ MessageBox.Show(statistics + Environment.NewLine + "The file " + fileInfo.Name + " has been written to " + fileInfo.DirectoryName + "!" + Environment.NewLine + "Run this script in IDA to set names.");
}
- catch (Exception ex)
+ catch (Exception exception)
{
- ReportError(ex);
+ ReportError(exception);
}
}
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index 8d34145..f6e921d 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -8,10 +8,10 @@
//
//------------------------------------------------------------------------------
-namespace AddressLibraryManager.Properties
-{
-
-
+namespace AddressLibraryManager.Properties {
+ using System;
+
+
///
/// A strongly-typed resource class, for looking up localized strings, etc.
///
@@ -19,51 +19,43 @@ namespace AddressLibraryManager.Properties
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
+ internal class Resources {
+
private static global::System.Resources.ResourceManager resourceMan;
-
+
private static global::System.Globalization.CultureInfo resourceCulture;
-
+
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
+ internal Resources() {
}
-
+
///
/// Returns the cached ResourceManager instance used by this class.
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AddressLibraryManager.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
-
+
///
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
return resourceCulture;
}
- set
- {
+ set {
resourceCulture = value;
}
}
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
index ea3f442..a2e0f9b 100644
--- a/Properties/Settings.Designer.cs
+++ b/Properties/Settings.Designer.cs
@@ -8,21 +8,17 @@
//
//------------------------------------------------------------------------------
-namespace AddressLibraryManager.Properties
-{
-
-
+namespace AddressLibraryManager.Properties {
+
+
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
+
+ public static Settings Default {
+ get {
return defaultInstance;
}
}