From 7b88fa36653fd80a1be4adfb3288bec1ffbf58ad Mon Sep 17 00:00:00 2001 From: alcexhim Date: Wed, 6 Aug 2014 15:35:46 -0400 Subject: [PATCH] Moved Microsoft stuff into its own plugin --- .../Languages/English.xml | 2 +- .../MSCompressedCompressionMethod.cs | 2 +- .../MSCompressed/MSCompressedDataFormat.cs | 2 +- .../MSCompressedKWAJCompressionMethod.cs | 2 +- .../MSCompressedKWAJHeaderFlags.cs | 2 +- .../Shortcut/Microsoft/LNKDataFlags.cs | 102 ++++++++++++++ .../Shortcut/Microsoft/LNKDataFormat.cs | 124 ++++++++++++++++++ .../Microsoft/LNKFileAttributeFlags.cs | 13 ++ .../Shortcut/Microsoft/LNKHotkey.cs | 11 ++ .../Shortcut/Microsoft/LNKLocationFlags.cs | 29 ++++ .../Shortcut/Microsoft/LNKWindowState.cs | 11 ++ .../Properties/AssemblyInfo.cs | 36 +++++ .../UniversalEditor.Plugins.Microsoft.csproj | 64 +++++++++ 13 files changed, 395 insertions(+), 5 deletions(-) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedCompressionMethod.cs (76%) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedDataFormat.cs (99%) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedKWAJCompressionMethod.cs (90%) rename CSharp/Plugins/{UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem => UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft}/MSCompressed/MSCompressedKWAJHeaderFlags.cs (94%) create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml index f8f803f5..abb1ca2c 100644 --- a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml +++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Languages/English.xml @@ -3,7 +3,7 @@ - + diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedCompressionMethod.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedCompressionMethod.cs similarity index 76% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedCompressionMethod.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedCompressionMethod.cs index 6710a70b..7256c501 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedCompressionMethod.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedCompressionMethod.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { public enum MSCompressedCompressionMethod { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedDataFormat.cs similarity index 99% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedDataFormat.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedDataFormat.cs index 19347093..b2582acc 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedDataFormat.cs @@ -5,7 +5,7 @@ using System.Text; using UniversalEditor.Accessors; using UniversalEditor.ObjectModels.FileSystem; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { public class MSCompressedDataFormat : DataFormat { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJCompressionMethod.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJCompressionMethod.cs similarity index 90% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJCompressionMethod.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJCompressionMethod.cs index 2cf36b1f..6dfba831 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJCompressionMethod.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJCompressionMethod.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { public enum MSCompressedKWAJCompressionMethod { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJHeaderFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJHeaderFlags.cs similarity index 94% rename from CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJHeaderFlags.cs rename to CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJHeaderFlags.cs index 96359bed..6f007114 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/MSCompressed/MSCompressedKWAJHeaderFlags.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/FileSystem/Microsoft/MSCompressed/MSCompressedKWAJHeaderFlags.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; -namespace UniversalEditor.DataFormats.FileSystem.MSCompressed +namespace UniversalEditor.DataFormats.FileSystem.Microsoft.MSCompressed { [Flags()] public enum MSCompressedKWAJHeaderFlags diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs new file mode 100644 index 00000000..9c25b246 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFlags.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + [Flags()] + public enum LNKDataFlags + { + None = 0x00000000, + /// + /// The LNK file contains a link target identifier. + /// + HasTargetIDList = 0x00000001, + /// + /// The LNK file contains location information. + /// + HasLinkInfo = 0x00000002, + /// + /// The LNK file contains a description data string. + /// + HasName = 0x00000004, + /// + /// The LNK file contains a relative path data string. + /// + HasRelativePath = 0x00000008, + /// + /// The LNK file contains a working directory data string. + /// + HasWorkingDir = 0x00000010, + /// + /// The LNK file contains a command line arguments data string. + /// + HasArguments = 0x00000020, + /// + /// The LNK file contains a custom icon location. + /// + HasIconLocation = 0x00000040, + /// + /// The data strings in the LNK file are stored in Unicode (UTF-16 little-endian) instead of ASCII. + /// + IsUnicode = 0x00000080, + /// + /// The location information is ignored. + /// + ForceNoLinkInfo = 0x00000100, + /// + /// The LNK file contains environment variables that should be expanded. + /// + HasExpString = 0x00000200, + /// + /// A 16-bit target application is run in a separate virtual machine. + /// + RunInSeparateProcess = 0x00000400, + // Reserved = 0x00000800, + /// + /// The LNK file contains a Darwin (Mac OS-X) properties data block. + /// + HasDarwinID = 0x00001000, + /// + /// The target application is run as a different user. + /// + RunAsUser = 0x00002000, + /// + /// The LNK file contains an icon location data block. + /// + HasExpIcon = 0x00004000, + /// + /// The file system location is represented in the shell namespace when the path to an + /// item is parsed into the link target identifiers. + /// Contains a known folder location data block ? + /// + NoPidlAlias = 0x00008000, + // Reserved = 0x00010000, + // Windows Vista and later? + /// + /// The target application is run with the shim layer. The LNK file contains shim layer + /// properties data block. + /// + RunWithShimLayer = 0x00020000, + /// + /// The LNK does not contain a distributed link tracking data block. Note that LNK files + /// in Windows XP and earlier do not use the ForceNoLinkTrack flag. + /// + ForceNoLinkTrack = 0x00040000, + /// + /// The LNK file contains a metadata property store data block. + /// + EnableTargetMetadata = 0x00080000, + /// + /// The environment variables location block should be ignored. + /// + DisableLinkPathTracking = 0x00100000, + DisableKnownFolderTracking = 0x00200000, + DisableKnownFolderAlias = 0x00400000, + AllowLinkToLink = 0x00800000, + UnaliasOnSave = 0x01000000, + PreferEnvironmentPath = 0x02000000, + KeepLocalIDListForUNCTarget = 0x04000000 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs new file mode 100644 index 00000000..57295e71 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKDataFormat.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using UniversalEditor.IO; +using UniversalEditor.ObjectModels.Shortcut; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + public class LNKDataFormat : DataFormat + { + private static readonly Guid LNK_CLASSID = new Guid("00021401-0000-0000-00c0-000000000046}"); + + private static DataFormatReference _dfr = null; + public override DataFormatReference MakeReference() + { + if (_dfr == null) + { + _dfr = base.MakeReference(); + _dfr.Capabilities.Add(typeof(ShortcutObjectModel), DataFormatCapabilities.All); + _dfr.Sources.Add("https://03132e779c908f66a75b1162132f53bf2761aa1a.googledrive.com/host/0B3fBvzttpiiSQmluVC1YeDVvZWM/Windows%20Shortcut%20File%20%28LNK%29%20format.pdf"); + _dfr.Filters.Add("Microsoft shortcut", new byte?[][] { new byte?[] { 0x4C, 0x00, 0x00, 0x00 } }, new string[] { "*.lnk" }); + } + return _dfr; + } + + protected override void LoadInternal(ref ObjectModel objectModel) + { + ShortcutObjectModel shortcut = (objectModel as ShortcutObjectModel); + if (shortcut == null) throw new ObjectModelNotSupportedException(); + + Reader reader = base.Accessor.Reader; + + #region File header + uint headerSize = reader.ReadUInt32(); + if (headerSize != 0x0000004C) throw new InvalidDataFormatException("Invalid header size for shortcut file (not 0x0000004C)"); + + Guid classID = reader.ReadGuid(); + if (classID.Equals(LNK_CLASSID)) throw new InvalidDataFormatException("Class ID '" + classID.ToString("B") + "' does not match LNK class ID '" + LNK_CLASSID.ToString("B") + "'"); + + LNKDataFlags dataFlags = (LNKDataFlags)reader.ReadUInt32(); + LNKFileAttributeFlags fileAttributeFlags = (LNKFileAttributeFlags)reader.ReadUInt32(); + + long creationFILETIME = reader.ReadInt64(); + long accessedFILETIME = reader.ReadInt64(); + long modifiedFILETIME = reader.ReadInt64(); + int filesize = reader.ReadInt32(); + int iconindex = reader.ReadInt32(); + LNKWindowState windowState = (LNKWindowState)reader.ReadInt32(); + LNKHotkey hotkey = (LNKHotkey)reader.ReadInt16(); + short reserved1 = reader.ReadInt16(); + int reserved2 = reader.ReadInt32(); + int reserved3 = reader.ReadInt32(); + #endregion + #region Shell item identifiers list (Link target identifier) + if ((dataFlags & LNKDataFlags.HasTargetIDList) == LNKDataFlags.HasTargetIDList) + { + // The size of the link target identifier shell item identifiers list + ushort targetIDListSize = reader.ReadUInt16(); + // shell item identifiers (LIBFWSI) + } + #endregion + #region Location information + if ((dataFlags & LNKDataFlags.HasLinkInfo) == LNKDataFlags.HasLinkInfo) + { + uint locationInfoSize = reader.ReadUInt32(); + #region Location information header + uint locationInfoHeaderSize = reader.ReadUInt32(); + LNKLocationFlags locationFlags = (LNKLocationFlags)reader.ReadUInt32(); + + // Offset to the volume information. The offset is relative to the start of the + // location information. + uint volumeInformationOffset = reader.ReadUInt32(); + // Offset to the local path. The offset is relative to the start of the location + // information. + uint localPathOffset = reader.ReadUInt32(); + // Offset to the network share information. The offset is relative to the start of + // the location information. + uint networkShareInformationOffset = reader.ReadUInt32(); + // Offset to the common path. The offset is relative to the start of the location + // information. + uint commonPathOffset = reader.ReadUInt32(); + if (locationInfoHeaderSize > 28) + { + // Offset to the Unicode local path. + uint unicodeLocalPathOffset = reader.ReadUInt32(); + if (locationInfoHeaderSize > 32) + { + // Offset to the Unicode common path. + uint unicodeCommonPathOffset = reader.ReadUInt32(); + } + } + #endregion + + // The full filename can be determined by: + // • combining the local path and the common path + // • combining the network share name (in the network share information) with + // the common path + + // Note that the network share name is not necessarily terminated by a path + // separator. Currently it is assumed that the same applies to the local path. + // Also, the file can contain an empty common path where the local path contains + // the full path. + } + #endregion + #region Data strings + #endregion + #region Extra data blocks + #endregion + } + + protected override void SaveInternal(ObjectModel objectModel) + { + ShortcutObjectModel shortcut = (objectModel as ShortcutObjectModel); + if (shortcut == null) throw new ObjectModelNotSupportedException(); + + Writer writer = base.Accessor.Writer; + writer.WriteUInt32(0x0000004C); + + throw new NotImplementedException(); + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs new file mode 100644 index 00000000..044379fb --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKFileAttributeFlags.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + [Flags()] + public enum LNKFileAttributeFlags + { + None = 0 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs new file mode 100644 index 00000000..c0217aed --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKHotkey.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + public enum LNKHotkey : short + { + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs new file mode 100644 index 00000000..149b843b --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKLocationFlags.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + [Flags()] + public enum LNKLocationFlags + { + None = 0x00000000, + /// + /// The linked file is on a volume. If set, the volume information and the local path + /// contain data. + /// + VolumeIDAndLocalBasePath = 0x0001, + /// + /// The linked file is on a network share. If set, the network share information and + /// common path contain data. + /// + /// + /// Although [MS-SHLLINK] states that when the CommonNetworkRelativeLinkAndPathSuffix + /// location flag is not set the offset to the network share information should be zero, + /// the value can still be set, but is not necessarily valid. This behavior was seen on + /// Windows 95. + /// + CommonNetworkRelativeLinkAndPathSuffix = 0x0002 + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs new file mode 100644 index 00000000..1dc6b7eb --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Shortcut/Microsoft/LNKWindowState.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.DataFormats.Shortcut.Microsoft +{ + public enum LNKWindowState + { + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..d66fc6ba --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UniversalEditor.Plugins.Microsoft")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("City of Orlando")] +[assembly: AssemblyProduct("UniversalEditor.Plugins.Microsoft")] +[assembly: AssemblyCopyright("Copyright © City of Orlando 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("40fdeaf4-17e9-4b69-80ab-3221452736fb")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj new file mode 100644 index 00000000..42060a1e --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj @@ -0,0 +1,64 @@ + + + + + Debug + AnyCPU + {4698BC3F-EC29-42EB-9AED-3D8F9983A108} + Library + Properties + UniversalEditor + UniversalEditor.Plugins.Microsoft + v3.5 + 512 + + + + true + full + false + ..\..\Output\Debug\Plugins\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + ..\..\Output\Release\Plugins\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + {2d4737e6-6d95-408a-90db-8dff38147e85} + UniversalEditor.Core + + + {30467e5c-05bc-4856-aadc-13906ef4cadd} + UniversalEditor.Essential + + + + + + \ No newline at end of file