Browse Source

Merge branch 'master' of https://github.com/icsharpcode/ILSpy into fancy-tooltips

pull/1654/head
Siegfried Pammer 6 years ago
parent
commit
7ee89ab18d
  1. 2
      DecompilerNuGetDemos.workbook
  2. 4
      ICSharpCode.Decompiler.Console/ICSharpCode.Decompiler.Console.csproj
  3. 2
      ICSharpCode.Decompiler.PowerShell/ICSharpCode.Decompiler.PowerShell.csproj
  4. 5
      ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
  5. 3
      ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
  6. 6
      ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs
  7. 10
      ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
  8. 2
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1389.cs
  9. 15
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.cs
  10. 42
      ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.il
  11. 125
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomTaskType.cs
  12. 17
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/FixProxyCalls.cs
  13. 17
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/Switch.cs
  14. 10
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/TypeAnalysisTests.cs
  15. 5
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/ValueTypes.cs
  16. 8
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNaming.cs
  17. 8
      ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNamingWithoutSymbols.cs
  18. 2
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  19. 2
      ICSharpCode.Decompiler/CSharp/CallBuilder.cs
  20. 14
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs
  21. 87
      ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs
  22. 16
      ICSharpCode.Decompiler/CSharp/Transforms/ConvertConstructorCallIntoInitializer.cs
  23. 27
      ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs
  24. 15
      ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs
  25. 4
      ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs
  26. 20
      ICSharpCode.Decompiler/DecompilerSettings.cs
  27. 6
      ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj
  28. 18
      ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs
  29. 2
      ICSharpCode.Decompiler/IL/ILReader.cs
  30. 17
      ICSharpCode.Decompiler/IL/Instructions.cs
  31. 2
      ICSharpCode.Decompiler/IL/Instructions.tt
  32. 2
      ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
  33. 2
      ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs
  34. 2
      ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs
  35. 2
      ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs
  36. 3
      ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs
  37. 13
      ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs
  38. 2
      ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs
  39. 17
      ICSharpCode.Decompiler/IL/Transforms/ProxyCallReplacer.cs
  40. 2
      ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs
  41. 4
      ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs
  42. 2
      ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs
  43. 4
      ICSharpCode.Decompiler/Metadata/OperandType.cs
  44. 2
      ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs
  45. 1
      ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultTypeParameter.cs
  46. 2
      ICSharpCode.Decompiler/TypeSystem/Implementation/KnownAttributes.cs
  47. 62
      ICSharpCode.Decompiler/TypeSystem/TaskType.cs
  48. 2
      ILSpy.AddIn/Commands/OpenReferenceCommand.cs
  49. 6
      ILSpy.AddIn/ILSpy.AddIn.csproj
  50. 2
      ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj
  51. 4
      ILSpy.BamlDecompiler/ILSpy.BamlDecompiler.csproj
  52. 16
      ILSpy.Package/ILSpy.Package.wapproj
  53. BIN
      ILSpy.Package/Images/StoreLogo.backup.png
  54. 2
      ILSpy.Package/Package-CI.appxmanifest
  55. 2
      ILSpy.Package/Package-Local.appxmanifest
  56. 6
      ILSpy.Package/Package.appxmanifest
  57. 2
      ILSpy.Tests/ILSpy.Tests.csproj
  58. 96
      ILSpy.WithPackage.sln
  59. 2
      ILSpy/Analyzers/AnalyzeCommand.cs
  60. 13
      ILSpy/Analyzers/Builtin/EventImplementsInterfaceAnalyzer.cs
  61. 12
      ILSpy/Analyzers/Builtin/EventOverriddenByAnalyzer.cs
  62. 13
      ILSpy/Analyzers/Builtin/MethodImplementsInterfaceAnalyzer.cs
  63. 13
      ILSpy/Analyzers/Builtin/MethodOverriddenByAnalyzer.cs
  64. 13
      ILSpy/Analyzers/Builtin/PropertyImplementsInterfaceAnalyzer.cs
  65. 12
      ILSpy/Analyzers/Builtin/PropertyOverriddenByAnalyzer.cs
  66. 2
      ILSpy/Commands/BrowseBackCommand.cs
  67. 2
      ILSpy/Commands/BrowseForwardCommand.cs
  68. 4
      ILSpy/Commands/OpenCommand.cs
  69. 2
      ILSpy/Commands/OpenFromGacCommand.cs
  70. 2
      ILSpy/Commands/OpenListCommand.cs
  71. 4
      ILSpy/Commands/RefreshCommand.cs
  72. 2
      ILSpy/Commands/SaveCodeContextMenuEntry.cs
  73. 2
      ILSpy/Commands/SaveCommand.cs
  74. 8
      ILSpy/Commands/SortAssemblyListCommand.cs
  75. 16
      ILSpy/ContextMenuEntry.cs
  76. 4
      ILSpy/Controls/SearchBoxStyle.xaml
  77. 38
      ILSpy/Controls/XamlResourceExtension.cs
  78. 43
      ILSpy/FilterSettings.cs
  79. 368
      ILSpy/ILSpy.csproj
  80. BIN
      ILSpy/Images/Assembly.png
  81. 1
      ILSpy/Images/Assembly.svg
  82. 11
      ILSpy/Images/Assembly.xaml
  83. BIN
      ILSpy/Images/AssemblyList.png
  84. 1
      ILSpy/Images/AssemblyList.svg
  85. 10
      ILSpy/Images/AssemblyList.xaml
  86. BIN
      ILSpy/Images/AssemblyListGAC.png
  87. 84
      ILSpy/Images/AssemblyListGAC.svg
  88. 44
      ILSpy/Images/AssemblyListGAC.xaml
  89. BIN
      ILSpy/Images/AssemblyWarning.png
  90. 1
      ILSpy/Images/AssemblyWarning.svg
  91. 11
      ILSpy/Images/AssemblyWarning.xaml
  92. BIN
      ILSpy/Images/Back.png
  93. 1
      ILSpy/Images/Back.svg
  94. 10
      ILSpy/Images/Back.xaml
  95. BIN
      ILSpy/Images/Break.png
  96. BIN
      ILSpy/Images/Breakpoint.png
  97. BIN
      ILSpy/Images/Class.png
  98. 1
      ILSpy/Images/Class.svg
  99. 9
      ILSpy/Images/Class.xaml
  100. BIN
      ILSpy/Images/ClearSearch.png
  101. Some files were not shown because too many files have changed in this diff Show More

2
DecompilerNuGetDemos.workbook

@ -6,7 +6,7 @@ platforms:
- DotNetCore - DotNetCore
packages: packages:
- id: ICSharpCode.Decompiler - id: ICSharpCode.Decompiler
version: 5.0.0.5066-preview4 version: 5.0.0.5124
--- ---
Setup: load the references required to work with the decompiler Setup: load the references required to work with the decompiler

4
ICSharpCode.Decompiler.Console/ICSharpCode.Decompiler.Console.csproj

@ -7,7 +7,7 @@
<PackAsTool>true</PackAsTool> <PackAsTool>true</PackAsTool>
<AssemblyName>ilspycmd</AssemblyName> <AssemblyName>ilspycmd</AssemblyName>
<ToolCommandName>ilspycmd</ToolCommandName> <ToolCommandName>ilspycmd</ToolCommandName>
<Version>5.0.0-preview4</Version> <Version>5.0.0.5124</Version>
<Description>Command-line decompiler using the ILSpy decompilation engine</Description> <Description>Command-line decompiler using the ILSpy decompilation engine</Description>
<Copyright>Copyright 2011-2019 AlphaSierraPapa</Copyright> <Copyright>Copyright 2011-2019 AlphaSierraPapa</Copyright>
<PackageProjectUrl>https://github.com/icsharpcode/ILSpy/</PackageProjectUrl> <PackageProjectUrl>https://github.com/icsharpcode/ILSpy/</PackageProjectUrl>
@ -28,7 +28,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="McMaster.Extensions.CommandLineUtils" Version="2.3.2" /> <PackageReference Include="McMaster.Extensions.CommandLineUtils" Version="2.3.2" />
<PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5066-preview4" /> <PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5124" />
<PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" /> <PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" />
<PackageReference Include="System.Runtime.Handles" Version="4.3.0" /> <PackageReference Include="System.Runtime.Handles" Version="4.3.0" />

2
ICSharpCode.Decompiler.PowerShell/ICSharpCode.Decompiler.PowerShell.csproj

@ -8,7 +8,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="PowerShellStandard.Library" Version="5.1.0" /> <PackageReference Include="PowerShellStandard.Library" Version="5.1.0" />
<PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5066-preview4" /> <PackageReference Include="ICSharpCode.Decompiler" Version="5.0.0.5124" />
</ItemGroup> </ItemGroup>
</Project> </Project>

5
ICSharpCode.Decompiler.Tests/Helpers/Tester.cs

@ -183,20 +183,21 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
} }
static readonly string refAsmPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), static readonly string refAsmPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
@"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.2"); @"Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2");
static readonly string thisAsmPath = Path.GetDirectoryName(typeof(Tester).Assembly.Location); static readonly string thisAsmPath = Path.GetDirectoryName(typeof(Tester).Assembly.Location);
static readonly Lazy<IEnumerable<MetadataReference>> defaultReferences = new Lazy<IEnumerable<MetadataReference>>(delegate { static readonly Lazy<IEnumerable<MetadataReference>> defaultReferences = new Lazy<IEnumerable<MetadataReference>>(delegate {
return new[] return new[]
{ {
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Facades\\netstandard.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "mscorlib.dll")), MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "mscorlib.dll")),
MetadataReference.CreateFromFile(Path.Combine(thisAsmPath, "netstandard.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.dll")), MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Core.dll")), MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Core.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, @"Facades\System.Runtime.dll")), MetadataReference.CreateFromFile(Path.Combine(refAsmPath, @"Facades\System.Runtime.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Xml.dll")), MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Xml.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Microsoft.CSharp.dll")), MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Microsoft.CSharp.dll")),
MetadataReference.CreateFromFile(typeof(ValueTuple).Assembly.Location), MetadataReference.CreateFromFile(typeof(ValueTuple).Assembly.Location),
MetadataReference.CreateFromFile(typeof(ValueTask).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Span<>).Assembly.Location), MetadataReference.CreateFromFile(typeof(Span<>).Assembly.Location),
}; };
}); });

3
ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net462</TargetFramework> <TargetFramework>net472</TargetFramework>
<LangVersion>7.3</LangVersion> <LangVersion>7.3</LangVersion>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
@ -81,6 +81,7 @@
<Compile Include="DisassemblerPrettyTestRunner.cs" /> <Compile Include="DisassemblerPrettyTestRunner.cs" />
<Compile Include="TestCases\ILPretty\ConstantBlobs.cs" /> <Compile Include="TestCases\ILPretty\ConstantBlobs.cs" />
<Compile Include="TestCases\Pretty\OutVariables.cs" /> <Compile Include="TestCases\Pretty\OutVariables.cs" />
<Compile Include="TestCases\Pretty\CustomTaskType.cs" />
<None Include="TestCases\VBPretty\VBCompoundAssign.cs" /> <None Include="TestCases\VBPretty\VBCompoundAssign.cs" />
<Compile Include="TestCases\Pretty\ThrowExpressions.cs" /> <Compile Include="TestCases\Pretty\ThrowExpressions.cs" />
<None Include="TestCases\ILPretty\Issue1145.cs" /> <None Include="TestCases\ILPretty\Issue1145.cs" />

6
ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs

@ -154,6 +154,12 @@ namespace ICSharpCode.Decompiler.Tests
Run(); Run();
} }
[Test]
public void Issue1681()
{
Run();
}
[Test] [Test]
public void Issue1454() public void Issue1454()
{ {

10
ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

@ -284,7 +284,9 @@ namespace ICSharpCode.Decompiler.Tests
[Test] [Test]
public void VariableNamingWithoutSymbols([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions) public void VariableNamingWithoutSymbols([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions)
{ {
RunForLibrary(cscOptions: cscOptions, decompilerSettings: new DecompilerSettings { UseDebugSymbols = false }); var settings = Tester.GetSettings(cscOptions);
settings.UseDebugSymbols = false;
RunForLibrary(cscOptions: cscOptions, decompilerSettings: settings);
} }
[Test] [Test]
@ -299,6 +301,12 @@ namespace ICSharpCode.Decompiler.Tests
Run(cscOptions: cscOptions); Run(cscOptions: cscOptions);
} }
[Test]
public void CustomTaskType([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test] [Test]
public void NullableRefTypes([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions) public void NullableRefTypes([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{ {

2
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1389.cs

@ -12,7 +12,7 @@ namespace Issue1389
private static void UnusedResultOfIsinst() private static void UnusedResultOfIsinst()
{ {
bool flag = GetObject() is TypeCode; _ = (GetObject() is TypeCode);
} }
private static bool BoolResultOfIsinst() private static bool BoolResultOfIsinst()

15
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.cs

@ -0,0 +1,15 @@
namespace ICSharpCode.Decompiler.Tests.TestCases.ILPretty
{
internal class BaseClass
{
public int importsClausePosition;
}
internal class Issue1681 : BaseClass
{
public void Test()
{
_ = importsClausePosition;
}
}
}

42
ICSharpCode.Decompiler.Tests/TestCases/ILPretty/Issue1681.il

@ -0,0 +1,42 @@
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
.assembly ConsoleApp11
{
.ver 1:0:0:0
}
.module ConsoleApp11.exe
// MVID: {B973FCD6-A9C4-48A9-8291-26DDC248E208}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00020003 // ILONLY 32BITPREFERRED
// Image base: 0x000001C4B6C90000
.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.ILPretty.BaseClass
extends [mscorlib]System.Object
{
.field public int32 importsClausePosition
}
.class private auto ansi beforefieldinit ICSharpCode.Decompiler.Tests.TestCases.ILPretty.Issue1681
extends ICSharpCode.Decompiler.Tests.TestCases.ILPretty.BaseClass
{
.method public hidebysig instance void Test() cil managed
{
// Code size 18 (0x12)
.maxstack 8
ldarg.0
ldfld int32 class ICSharpCode.Decompiler.Tests.TestCases.ILPretty.BaseClass::importsClausePosition
pop
ret
} // end of method Issue1681::Test
}

125
ICSharpCode.Decompiler.Tests/TestCases/Pretty/CustomTaskType.cs

@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
public class CustomTaskType
{
private int memberField;
public async ValueTask SimpleVoidTaskMethod()
{
Console.WriteLine("Before");
await Task.Delay(TimeSpan.FromSeconds(1.0));
Console.WriteLine("After");
}
public async ValueTask TaskMethodWithoutAwait()
{
Console.WriteLine("No Await");
}
public async ValueTask CapturingThis()
{
await Task.Delay(memberField);
}
public async ValueTask CapturingThisWithoutAwait()
{
Console.WriteLine(memberField);
}
public async ValueTask<bool> SimpleBoolTaskMethod()
{
Console.WriteLine("Before");
await Task.Delay(TimeSpan.FromSeconds(1.0));
Console.WriteLine("After");
return true;
}
public async void TwoAwaitsWithDifferentAwaiterTypes()
{
Console.WriteLine("Before");
if (await SimpleBoolTaskMethod()) {
await Task.Delay(TimeSpan.FromSeconds(1.0));
}
Console.WriteLine("After");
}
public async void AwaitInLoopCondition()
{
while (await SimpleBoolTaskMethod()) {
Console.WriteLine("Body");
}
}
public async ValueTask AwaitInCatch(bool b, ValueTask<int> task1, ValueTask<int> task2)
{
try {
Console.WriteLine("Start try");
await task1;
Console.WriteLine("End try");
} catch (Exception) {
if (!b) {
await task2;
} else {
Console.WriteLine("No await");
}
}
}
public async ValueTask AwaitInFinally(bool b, ValueTask<int> task1, ValueTask<int> task2)
{
try {
Console.WriteLine("Start try");
await task1;
Console.WriteLine("End try");
} finally {
if (!b) {
await task2;
} else {
Console.WriteLine("No await");
}
}
}
public static async ValueTask<int> GetIntegerSumAsync(IEnumerable<int> items)
{
await Task.Delay(100);
int num = 0;
foreach (int item in items) {
num += item;
}
return num;
}
public static Func<ValueTask<int>> AsyncLambda()
{
return async () => await GetIntegerSumAsync(new int[3] {
1,
2,
3
});
}
public static Func<ValueTask<int>> AsyncDelegate()
{
return async delegate {
await Task.Delay(10);
return 2;
};
}
public static async ValueTask<int> AsyncLocalFunctions()
{
return await Nested(1) + await Nested(2);
async ValueTask<int> Nested(int i)
{
await Task.Delay(i);
return i;
}
}
}
}

17
ICSharpCode.Decompiler.Tests/TestCases/Pretty/FixProxyCalls.cs

@ -114,6 +114,23 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.ILPretty
} }
} }
public class Issue1660 : Issue1660Base
{
public Action<object> M(object state)
{
return delegate(object x) {
base.BaseCall(x, state, (Func<object>)(() => null));
};
}
}
public class Issue1660Base
{
protected virtual void BaseCall<T>(object x, object state, Func<T> action)
{
}
}
internal class J : I internal class J : I
{ {
protected internal override void Test(int a) protected internal override void Test(int a)

17
ICSharpCode.Decompiler.Tests/TestCases/Pretty/Switch.cs

@ -1192,5 +1192,22 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
} }
} }
public static bool DoNotRemoveAssignmentBeforeSwitch(string x, out ConsoleKey key)
{
key = (ConsoleKey)0;
switch (x) {
case "A":
key = ConsoleKey.A;
break;
case "B":
key = ConsoleKey.B;
break;
case "C":
key = ConsoleKey.C;
break;
}
return key != (ConsoleKey)0;
}
} }
} }

10
ICSharpCode.Decompiler.Tests/TestCases/Pretty/TypeAnalysisTests.cs

@ -276,5 +276,15 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{ {
return AttributeTargets.All.HasFlag(AttributeTargets.Assembly); return AttributeTargets.All.HasFlag(AttributeTargets.Assembly);
} }
public static string ImpossibleCast1(int i)
{
return (string)(object)i;
}
public static string ImpossibleCast2(Action a)
{
return (string)(object)a;
}
} }
} }

5
ICSharpCode.Decompiler.Tests/TestCases/Pretty/ValueTypes.cs

@ -273,5 +273,10 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{ {
Get<S>().Field.ToString(); Get<S>().Field.ToString();
} }
public static string CallOnIntegerConstant()
{
return ulong.MaxValue.ToString();
}
} }
} }

8
ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNaming.cs

@ -10,12 +10,20 @@
private void Test(string text, C c) private void Test(string text, C c)
{ {
#if ROSLYN
_ = c.Name;
#else
string name = c.Name; string name = c.Name;
#endif
} }
private void Test2(string text, C c) private void Test2(string text, C c)
{ {
#if ROSLYN
_ = c.Text;
#else
string text2 = c.Text; string text2 = c.Text;
#endif
} }
} }
} }

8
ICSharpCode.Decompiler.Tests/TestCases/Pretty/VariableNamingWithoutSymbols.cs

@ -10,12 +10,20 @@
private void Test(string text, C c) private void Test(string text, C c)
{ {
#if ROSLYN
_ = c.Name;
#else
string name = c.Name; string name = c.Name;
#endif
} }
private void Test2(string text, C c) private void Test2(string text, C c)
{ {
#if ROSLYN
_ = c.Text;
#else
string text2 = c.Text; string text2 = c.Text;
#endif
} }
} }
} }

2
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -1164,6 +1164,8 @@ namespace ICSharpCode.Decompiler.CSharp
EnumValueDisplayMode DetectBestEnumValueDisplayMode(ITypeDefinition typeDef, PEFile module) EnumValueDisplayMode DetectBestEnumValueDisplayMode(ITypeDefinition typeDef, PEFile module)
{ {
if (settings.AlwaysShowEnumMemberValues)
return EnumValueDisplayMode.All;
if (typeDef.HasAttribute(KnownAttribute.Flags, inherit: false)) if (typeDef.HasAttribute(KnownAttribute.Flags, inherit: false))
return EnumValueDisplayMode.All; return EnumValueDisplayMode.All;
bool first = true; bool first = true;

2
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

@ -1294,7 +1294,7 @@ namespace ICSharpCode.Decompiler.CSharp
if (thisArgBox.Argument is LdObj ldobj) { if (thisArgBox.Argument is LdObj ldobj) {
thisArg = ldobj.Target; thisArg = ldobj.Target;
} else { } else {
thisArg = new AddressOf(thisArgBox.Argument); thisArg = new AddressOf(thisArgBox.Argument, thisArgBox.Type);
} }
} }
target = expressionBuilder.TranslateTarget(thisArg, target = expressionBuilder.TranslateTarget(thisArg,

14
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -188,6 +188,11 @@ namespace ICSharpCode.Decompiler.CSharp
} }
internal bool HidesVariableWithName(string name) internal bool HidesVariableWithName(string name)
{
return HidesVariableWithName(currentFunction, name);
}
internal static bool HidesVariableWithName(ILFunction currentFunction, string name)
{ {
return currentFunction.Ancestors.OfType<ILFunction>().Any(HidesVariableOrNestedFunction); return currentFunction.Ancestors.OfType<ILFunction>().Any(HidesVariableOrNestedFunction);
@ -2769,14 +2774,9 @@ namespace ICSharpCode.Decompiler.CSharp
protected internal override TranslatedExpression VisitAddressOf(AddressOf inst, TranslationContext context) protected internal override TranslatedExpression VisitAddressOf(AddressOf inst, TranslationContext context)
{ {
IType targetTypeHint = null;
if (context.TypeHint is ByReferenceType brt) {
targetTypeHint = brt.ElementType;
} else if (context.TypeHint is PointerType pt) {
targetTypeHint = pt.ElementType;
}
// HACK: this is only correct if the argument is an R-value; otherwise we're missing the copy to the temporary // HACK: this is only correct if the argument is an R-value; otherwise we're missing the copy to the temporary
var value = Translate(inst.Value, targetTypeHint); var value = Translate(inst.Value, inst.Type);
value = value.ConvertTo(inst.Type, this);
return new DirectionExpression(FieldDirection.Ref, value) return new DirectionExpression(FieldDirection.Ref, value)
.WithILInstruction(inst) .WithILInstruction(inst)
.WithRR(new ByReferenceResolveResult(value.ResolveResult, ReferenceKind.Ref)); .WithRR(new ByReferenceResolveResult(value.ResolveResult, ReferenceKind.Ref));

87
ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs

@ -206,13 +206,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
if (type == null) if (type == null)
throw new ArgumentNullException("type"); throw new ArgumentNullException("type");
AstType astType = ConvertTypeHelper(type); AstType astType = ConvertTypeHelper(type);
AddTypeAnnotation(astType, type);
return astType;
}
private void AddTypeAnnotation(AstType astType, IType type)
{
if (AddTypeReferenceAnnotations) if (AddTypeReferenceAnnotations)
astType.AddAnnotation(type); astType.AddAnnotation(type);
if (AddResolveResultAnnotations) if (AddResolveResultAnnotations)
astType.AddAnnotation(new TypeResolveResult(type)); astType.AddAnnotation(new TypeResolveResult(type));
return astType;
} }
public AstType ConvertType(FullTypeName fullTypeName) public AstType ConvertType(FullTypeName fullTypeName)
{ {
if (resolver != null) { if (resolver != null) {
@ -235,11 +240,10 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
} }
return type; return type;
} }
AstType ConvertTypeHelper(IType type) AstType ConvertTypeHelper(IType type)
{ {
TypeWithElementType typeWithElementType = type as TypeWithElementType; if (type is TypeWithElementType typeWithElementType) {
if (typeWithElementType != null) {
if (typeWithElementType is PointerType) { if (typeWithElementType is PointerType) {
return ConvertType(typeWithElementType.ElementType).MakePointerType(); return ConvertType(typeWithElementType.ElementType).MakePointerType();
} else if (typeWithElementType is ArrayType) { } else if (typeWithElementType is ArrayType) {
@ -254,20 +258,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
// not supported as type in C# // not supported as type in C#
return ConvertType(typeWithElementType.ElementType); return ConvertType(typeWithElementType.ElementType);
} }
} } else if (type is NullabilityAnnotatedType nat) {
if (type is ParameterizedType pt) {
if (AlwaysUseBuiltinTypeNames && pt.IsKnownType(KnownTypeCode.NullableOfT)) {
return ConvertType(pt.TypeArguments[0]).MakeNullableType();
}
return ConvertTypeHelper(pt.GenericType, pt.TypeArguments);
}
if (type is NullabilityAnnotatedType nat) {
var astType = ConvertType(nat.TypeWithoutAnnotation); var astType = ConvertType(nat.TypeWithoutAnnotation);
if (nat.Nullability == Nullability.Nullable) if (nat.Nullability == Nullability.Nullable)
astType = astType.MakeNullableType(); astType = astType.MakeNullableType();
return astType; return astType;
} } else if (type is TupleType tuple) {
if (type is TupleType tuple) {
var astType = new TupleAstType(); var astType = new TupleAstType();
foreach (var (etype, ename) in tuple.ElementTypes.Zip(tuple.ElementNames)) { foreach (var (etype, ename) in tuple.ElementTypes.Zip(tuple.ElementNames)) {
astType.Elements.Add(new TupleTypeElement { astType.Elements.Add(new TupleTypeElement {
@ -276,23 +272,35 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
}); });
} }
return astType; return astType;
} } else {
if (type is ITypeDefinition typeDef) { AstType astType;
if (ShowTypeParametersForUnboundTypes) if (type is ITypeDefinition typeDef) {
return ConvertTypeHelper(typeDef, typeDef.TypeArguments); if (ShowTypeParametersForUnboundTypes) {
if (typeDef.TypeParameterCount > 0) { astType = ConvertTypeHelper(typeDef, typeDef.TypeArguments);
// Unbound type } else if (typeDef.TypeParameterCount > 0) {
IType[] typeArguments = new IType[typeDef.TypeParameterCount]; // Unbound type
for (int i = 0; i < typeArguments.Length; i++) { IType[] typeArguments = new IType[typeDef.TypeParameterCount];
typeArguments[i] = SpecialType.UnboundTypeArgument; for (int i = 0; i < typeArguments.Length; i++) {
typeArguments[i] = SpecialType.UnboundTypeArgument;
}
astType = ConvertTypeHelper(typeDef, typeArguments);
} else {
astType = ConvertTypeHelper(typeDef, EmptyList<IType>.Instance);
}
} else if (type is ParameterizedType pt) {
if (AlwaysUseBuiltinTypeNames && pt.IsKnownType(KnownTypeCode.NullableOfT)) {
return ConvertType(pt.TypeArguments[0]).MakeNullableType();
} }
return ConvertTypeHelper(typeDef, typeArguments); astType = ConvertTypeHelper(pt.GenericType, pt.TypeArguments);
} else { } else {
return ConvertTypeHelper(typeDef, EmptyList<IType>.Instance); astType = MakeSimpleType(type.Name);
} }
if (type.Nullability == Nullability.Nullable) {
AddTypeAnnotation(astType, type.ChangeNullability(Nullability.Oblivious));
astType = astType.MakeNullableType();
}
return astType;
} }
return MakeSimpleType(type.Name);
} }
AstType ConvertTypeHelper(IType genericType, IReadOnlyList<IType> typeArguments) AstType ConvertTypeHelper(IType genericType, IReadOnlyList<IType> typeArguments)
@ -304,11 +312,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
if (AlwaysUseBuiltinTypeNames && typeDef != null) { if (AlwaysUseBuiltinTypeNames && typeDef != null) {
string keyword = KnownTypeReference.GetCSharpNameByTypeCode(typeDef.KnownTypeCode); string keyword = KnownTypeReference.GetCSharpNameByTypeCode(typeDef.KnownTypeCode);
if (keyword != null) { if (keyword != null) {
if (genericType.Nullability == Nullability.Nullable) { return new PrimitiveType(keyword);
return new PrimitiveType(keyword).MakeNullableType();
} else {
return new PrimitiveType(keyword);
}
} }
} }
@ -352,11 +356,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
if (AlwaysUseShortTypeNames || (typeDef == null && genericType.DeclaringType == null)) { if (AlwaysUseShortTypeNames || (typeDef == null && genericType.DeclaringType == null)) {
var shortResult = MakeSimpleType(genericType.Name); var shortResult = MakeSimpleType(genericType.Name);
AddTypeArguments(shortResult, genericType.TypeParameters, typeArguments, outerTypeParameterCount, genericType.TypeParameterCount); AddTypeArguments(shortResult, genericType.TypeParameters, typeArguments, outerTypeParameterCount, genericType.TypeParameterCount);
if (genericType.Nullability == Nullability.Nullable) { return shortResult;
return shortResult.MakeNullableType();
} else {
return shortResult;
}
} }
MemberType result = new MemberType(); MemberType result = new MemberType();
if (genericType.DeclaringType != null) { if (genericType.DeclaringType != null) {
@ -375,11 +375,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
} }
result.MemberName = genericType.Name; result.MemberName = genericType.Name;
AddTypeArguments(result, genericType.TypeParameters, typeArguments, outerTypeParameterCount, genericType.TypeParameterCount); AddTypeArguments(result, genericType.TypeParameters, typeArguments, outerTypeParameterCount, genericType.TypeParameterCount);
if (genericType.Nullability == Nullability.Nullable) { return result;
return result.MakeNullableType();
} else {
return result;
}
} }
/// <summary> /// <summary>
@ -604,11 +600,8 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
} else if (resolver != null) { } else if (resolver != null) {
ApplyShortAttributeNameIfPossible(type, astType, shortName); ApplyShortAttributeNameIfPossible(type, astType, shortName);
} }
AddTypeAnnotation(astType, type);
if (AddTypeReferenceAnnotations)
astType.AddAnnotation(type);
if (AddResolveResultAnnotations)
astType.AddAnnotation(new TypeResolveResult(type));
return astType; return astType;
} }

16
ICSharpCode.Decompiler/CSharp/Transforms/ConvertConstructorCallIntoInitializer.cs

@ -58,18 +58,20 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
public override void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration) public override void VisitConstructorDeclaration(ConstructorDeclaration constructorDeclaration)
{ {
ExpressionStatement stmt = constructorDeclaration.Body.Statements.FirstOrDefault() as ExpressionStatement; var stmt = constructorDeclaration.Body.Statements.FirstOrDefault() as ExpressionStatement;
if (stmt == null) if (stmt == null)
return; return;
InvocationExpression invocation = stmt.Expression as InvocationExpression; if (!(stmt.Expression is InvocationExpression invocation))
if (invocation == null)
return; return;
MemberReferenceExpression mre = invocation.Target as MemberReferenceExpression; if (invocation.Target is MemberReferenceExpression mre && mre.MemberName == ".ctor") {
if (mre != null && mre.MemberName == ".ctor") {
ConstructorInitializer ci = new ConstructorInitializer(); ConstructorInitializer ci = new ConstructorInitializer();
if (mre.Target is ThisReferenceExpression) var target = mre.Target;
// Ignore casts, those might be added if references are missing.
if (target is CastExpression cast)
target = cast.Expression;
if (target is ThisReferenceExpression)
ci.ConstructorInitializerType = ConstructorInitializerType.This; ci.ConstructorInitializerType = ConstructorInitializerType.This;
else if (mre.Target is BaseReferenceExpression) else if (target is BaseReferenceExpression)
ci.ConstructorInitializerType = ConstructorInitializerType.Base; ci.ConstructorInitializerType = ConstructorInitializerType.Base;
else else
return; return;

27
ICSharpCode.Decompiler/CSharp/Transforms/DeclareVariables.cs

@ -180,16 +180,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (!IsValidInStatementExpression(stmt.Expression)) { if (!IsValidInStatementExpression(stmt.Expression)) {
// fetch ILFunction // fetch ILFunction
var function = stmt.Ancestors.SelectMany(a => a.Annotations.OfType<ILFunction>()).First(f => f.Parent == null); var function = stmt.Ancestors.SelectMany(a => a.Annotations.OfType<ILFunction>()).First(f => f.Parent == null);
// assign result to dummy variable // if possible use C# 7.0 discard-assignment
var type = stmt.Expression.GetResolveResult().Type; if (context.Settings.Discards && !ExpressionBuilder.HidesVariableWithName(function, "_")) {
var v = function.RegisterVariable( stmt.Expression = new AssignmentExpression(
VariableKind.StackSlot, new IdentifierExpression("_"), // no ResolveResult
type, stmt.Expression.Detach());
AssignVariableNames.GenerateVariableName(function, type, stmt.Expression.Annotations.OfType<ILInstruction>().Where(AssignVariableNames.IsSupportedInstruction).FirstOrDefault()) } else {
); // assign result to dummy variable
stmt.Expression = new AssignmentExpression( var type = stmt.Expression.GetResolveResult().Type;
new IdentifierExpression(v.Name).WithRR(new ILVariableResolveResult(v, v.Type)), var v = function.RegisterVariable(
stmt.Expression.Detach()); VariableKind.StackSlot,
type,
AssignVariableNames.GenerateVariableName(function, type, stmt.Expression.Annotations.OfType<ILInstruction>().Where(AssignVariableNames.IsSupportedInstruction).FirstOrDefault())
);
stmt.Expression = new AssignmentExpression(
new IdentifierExpression(v.Name).WithRR(new ILVariableResolveResult(v, v.Type)),
stmt.Expression.Detach());
}
} }
} }
} }

15
ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

@ -223,8 +223,14 @@ namespace ICSharpCode.Decompiler.CSharp
} }
return this; return this;
} }
if (targetType.Kind == TypeKind.Unknown || targetType.Kind == TypeKind.Void || targetType.Kind == TypeKind.None) { if (targetType.Kind == TypeKind.Void || targetType.Kind == TypeKind.None) {
return this; // don't attempt to insert cast to '?' or 'void' as these are not valid. return this; // don't attempt to insert cast to '?' or 'void' as these are not valid.
} else if (targetType.Kind == TypeKind.Unknown) {
// don't attempt cast to '?', or casts between an unknown type and a known type with same name
if (targetType.Name == "?" || targetType.ReflectionName == type.ReflectionName) {
return this;
}
// However we still want explicit casts to types that are merely unresolved
} }
var convAnnotation = this.Expression.Annotation<ImplicitConversionAnnotation>(); var convAnnotation = this.Expression.Annotation<ImplicitConversionAnnotation>();
if (convAnnotation != null) { if (convAnnotation != null) {
@ -416,6 +422,13 @@ namespace ICSharpCode.Decompiler.CSharp
if (rr.IsCompileTimeConstant && !rr.IsError) { if (rr.IsCompileTimeConstant && !rr.IsError) {
return expressionBuilder.ConvertConstantValue(rr, allowImplicitConversion) return expressionBuilder.ConvertConstantValue(rr, allowImplicitConversion)
.WithILInstruction(this.ILInstructions); .WithILInstruction(this.ILInstructions);
} else if (rr.IsError && targetType.IsReferenceType == true && type.IsReferenceType == true) {
// Conversion between two reference types, but no direct cast allowed? cast via object
// Just make sure we avoid infinite recursion even if the resolver falsely claims we can't cast directly:
if (!(targetType.IsKnownType(KnownTypeCode.Object) || type.IsKnownType(KnownTypeCode.Object))) {
return this.ConvertTo(compilation.FindType(KnownTypeCode.Object), expressionBuilder)
.ConvertTo(targetType, expressionBuilder, checkForOverflow, allowImplicitConversion);
}
} }
if (targetType.Kind == TypeKind.Pointer && (0.Equals(ResolveResult.ConstantValue) || 0u.Equals(ResolveResult.ConstantValue))) { if (targetType.Kind == TypeKind.Pointer && (0.Equals(ResolveResult.ConstantValue) || 0u.Equals(ResolveResult.ConstantValue))) {
if (allowImplicitConversion) { if (allowImplicitConversion) {

4
ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs

@ -36,6 +36,7 @@ using static ICSharpCode.Decompiler.Metadata.DotNetCorePathFinderExtensions;
using static ICSharpCode.Decompiler.Metadata.MetadataExtensions; using static ICSharpCode.Decompiler.Metadata.MetadataExtensions;
using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.Decompiler.Solution; using ICSharpCode.Decompiler.Solution;
using ICSharpCode.Decompiler.DebugInfo;
namespace ICSharpCode.Decompiler.CSharp namespace ICSharpCode.Decompiler.CSharp
{ {
@ -73,6 +74,8 @@ namespace ICSharpCode.Decompiler.CSharp
public IAssemblyResolver AssemblyResolver { get; set; } public IAssemblyResolver AssemblyResolver { get; set; }
public IDebugInfoProvider DebugInfoProvider { get; set; }
/// <summary> /// <summary>
/// The MSBuild ProjectGuid to use for the new project. /// The MSBuild ProjectGuid to use for the new project.
/// <c>null</c> to automatically generate a new GUID. /// <c>null</c> to automatically generate a new GUID.
@ -322,6 +325,7 @@ namespace ICSharpCode.Decompiler.CSharp
CSharpDecompiler CreateDecompiler(DecompilerTypeSystem ts) CSharpDecompiler CreateDecompiler(DecompilerTypeSystem ts)
{ {
var decompiler = new CSharpDecompiler(ts, settings); var decompiler = new CSharpDecompiler(ts, settings);
decompiler.DebugInfoProvider = DebugInfoProvider;
decompiler.AstTransforms.Add(new EscapeInvalidIdentifiers()); decompiler.AstTransforms.Add(new EscapeInvalidIdentifiers());
decompiler.AstTransforms.Add(new RemoveCLSCompliantAttribute()); decompiler.AstTransforms.Add(new RemoveCLSCompliantAttribute());
return decompiler; return decompiler;

20
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -537,6 +537,26 @@ namespace ICSharpCode.Decompiler
} }
} }
bool alwaysShowEnumMemberValues = false;
/// <summary>
/// Gets/Sets whether to always show enum member values.
/// true: <c>enum Kind { A = 0, B = 1, C = 5 }</c>
/// false: <c>enum Kind { A, B, C = 5 }</c>
/// default: false
/// </summary>
[Category("Other")]
[Description("DecompilerSettings.AlwaysShowEnumMemberValues")]
public bool AlwaysShowEnumMemberValues {
get { return alwaysShowEnumMemberValues; }
set {
if (alwaysShowEnumMemberValues != value) {
alwaysShowEnumMemberValues = value;
OnPropertyChanged();
}
}
}
bool useDebugSymbols = true; bool useDebugSymbols = true;
/// <summary> /// <summary>

6
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -33,7 +33,6 @@
<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DebugType>portable</DebugType> <DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<EmbedAllSources>true</EmbedAllSources>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>$(DefineConstants);STEP</DefineConstants> <DefineConstants>$(DefineConstants);STEP</DefineConstants>
</PropertyGroup> </PropertyGroup>
@ -41,7 +40,6 @@
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> <PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>portable</DebugType> <DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<EmbedAllSources>true</EmbedAllSources>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
@ -54,6 +52,10 @@
<PackageReference Include="System.Collections.Immutable" Version="1.5.0" /> <PackageReference Include="System.Collections.Immutable" Version="1.5.0" />
<PackageReference Include="System.Reflection.Metadata" Version="1.6.0" /> <PackageReference Include="System.Reflection.Metadata" Version="1.6.0" />
<PackageReference Include="System.ValueTuple" Version="4.3.0" /> <PackageReference Include="System.ValueTuple" Version="4.3.0" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta2-19367-01">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

18
ICSharpCode.Decompiler/IL/ControlFlow/AsyncAwaitDecompiler.cs

@ -199,24 +199,26 @@ namespace ICSharpCode.Decompiler.IL.ControlFlow
return false; return false;
taskType = function.Method.ReturnType; taskType = function.Method.ReturnType;
builderType = startCall.Method.DeclaringTypeDefinition; builderType = startCall.Method.DeclaringTypeDefinition;
const string ns = "System.Runtime.CompilerServices";
if (taskType.IsKnownType(KnownTypeCode.Void)) { if (taskType.IsKnownType(KnownTypeCode.Void)) {
methodType = AsyncMethodType.Void; methodType = AsyncMethodType.Void;
underlyingReturnType = taskType; underlyingReturnType = taskType;
if (builderType?.FullTypeName != new TopLevelTypeName(ns, "AsyncVoidMethodBuilder")) if (builderType?.FullTypeName != new TopLevelTypeName("System.Runtime.CompilerServices", "AsyncVoidMethodBuilder"))
return false; return false;
} else if (taskType.IsKnownType(KnownTypeCode.Task)) { } else if (TaskType.IsNonGenericTaskType(taskType, out var builderTypeName)) {
methodType = AsyncMethodType.Task; methodType = AsyncMethodType.Task;
underlyingReturnType = context.TypeSystem.FindType(KnownTypeCode.Void); underlyingReturnType = context.TypeSystem.FindType(KnownTypeCode.Void);
if (builderType?.FullTypeName != new TopLevelTypeName(ns, "AsyncTaskMethodBuilder", 0)) if (builderType?.FullTypeName != builderTypeName)
return false; return false;
} else if (taskType.IsKnownType(KnownTypeCode.TaskOfT)) { } else if (TaskType.IsGenericTaskType(taskType, out builderTypeName)) {
methodType = AsyncMethodType.TaskOfT; methodType = AsyncMethodType.TaskOfT;
underlyingReturnType = TaskType.UnpackTask(context.TypeSystem, taskType); if (taskType.IsKnownType(KnownTypeCode.TaskOfT))
if (builderType?.FullTypeName != new TopLevelTypeName(ns, "AsyncTaskMethodBuilder", 1)) underlyingReturnType = TaskType.UnpackTask(context.TypeSystem, taskType);
else
underlyingReturnType = startCall.Method.DeclaringType.TypeArguments[0];
if (builderType?.FullTypeName != builderTypeName)
return false; return false;
} else { } else {
return false; // TODO: generalized async return type return false;
} }
if (startCall.Arguments.Count != 2) if (startCall.Arguments.Count != 2)
return false; return false;

2
ICSharpCode.Decompiler/IL/ILReader.cs

@ -1199,7 +1199,7 @@ namespace ICSharpCode.Decompiler.IL
case false: case false:
// field of value type: ldfld can handle temporaries // field of value type: ldfld can handle temporaries
if (PeekStackType() == StackType.O || PeekStackType() == StackType.Unknown) if (PeekStackType() == StackType.O || PeekStackType() == StackType.Unknown)
return new AddressOf(Pop()); return new AddressOf(Pop(), field.DeclaringType);
else else
return PopPointer(); return PopPointer();
default: default:

17
ICSharpCode.Decompiler/IL/Instructions.cs

@ -2529,9 +2529,10 @@ namespace ICSharpCode.Decompiler.IL
/// <summary>Stores the value into an anonymous temporary variable, and returns the address of that variable.</summary> /// <summary>Stores the value into an anonymous temporary variable, and returns the address of that variable.</summary>
public sealed partial class AddressOf : ILInstruction public sealed partial class AddressOf : ILInstruction
{ {
public AddressOf(ILInstruction value) : base(OpCode.AddressOf) public AddressOf(ILInstruction value, IType type) : base(OpCode.AddressOf)
{ {
this.Value = value; this.Value = value;
this.type = type;
} }
public static readonly SlotInfo ValueSlot = new SlotInfo("Value", canInlineInto: true); public static readonly SlotInfo ValueSlot = new SlotInfo("Value", canInlineInto: true);
ILInstruction value; ILInstruction value;
@ -2581,6 +2582,12 @@ namespace ICSharpCode.Decompiler.IL
return clone; return clone;
} }
public override StackType ResultType { get { return StackType.Ref; } } public override StackType ResultType { get { return StackType.Ref; } }
IType type;
/// <summary>Returns the type operand.</summary>
public IType Type {
get { return type; }
set { type = value; InvalidateFlags(); }
}
protected override InstructionFlags ComputeFlags() protected override InstructionFlags ComputeFlags()
{ {
return value.Flags; return value.Flags;
@ -2594,6 +2601,8 @@ namespace ICSharpCode.Decompiler.IL
{ {
WriteILRange(output, options); WriteILRange(output, options);
output.Write(OpCode); output.Write(OpCode);
output.Write(' ');
type.WriteTo(output);
output.Write('('); output.Write('(');
this.value.WriteTo(output, options); this.value.WriteTo(output, options);
output.Write(')'); output.Write(')');
@ -2613,7 +2622,7 @@ namespace ICSharpCode.Decompiler.IL
protected internal override bool PerformMatch(ILInstruction other, ref Patterns.Match match) protected internal override bool PerformMatch(ILInstruction other, ref Patterns.Match match)
{ {
var o = other as AddressOf; var o = other as AddressOf;
return o != null && this.value.PerformMatch(o.value, ref match); return o != null && this.value.PerformMatch(o.value, ref match) && type.Equals(o.type);
} }
} }
} }
@ -7805,14 +7814,16 @@ namespace ICSharpCode.Decompiler.IL
value = default(ILInstruction); value = default(ILInstruction);
return false; return false;
} }
public bool MatchAddressOf(out ILInstruction value) public bool MatchAddressOf(out ILInstruction value, out IType type)
{ {
var inst = this as AddressOf; var inst = this as AddressOf;
if (inst != null) { if (inst != null) {
value = inst.Value; value = inst.Value;
type = inst.Type;
return true; return true;
} }
value = default(ILInstruction); value = default(ILInstruction);
type = default(IType);
return false; return false;
} }
public bool MatchThreeValuedBoolAnd(out ILInstruction left, out ILInstruction right) public bool MatchThreeValuedBoolAnd(out ILInstruction left, out ILInstruction right)

2
ICSharpCode.Decompiler/IL/Instructions.tt

@ -179,7 +179,7 @@
CustomClassName("StLoc"), HasVariableOperand("Store", generateCheckInvariant: false), CustomArguments(("value", null)), CustomClassName("StLoc"), HasVariableOperand("Store", generateCheckInvariant: false), CustomArguments(("value", null)),
ResultType("variable.StackType")), ResultType("variable.StackType")),
new OpCode("addressof", "Stores the value into an anonymous temporary variable, and returns the address of that variable.", new OpCode("addressof", "Stores the value into an anonymous temporary variable, and returns the address of that variable.",
CustomClassName("AddressOf"), CustomArguments(("value", null)), ResultType("Ref")), CustomClassName("AddressOf"), CustomArguments(("value", null)), ResultType("Ref"), HasTypeOperand),
new OpCode("3vl.bool.and", "Three valued logic and. Inputs are of type bool? or I4, output is of type bool?. Unlike logic.and(), does not have short-circuiting behavior.", new OpCode("3vl.bool.and", "Three valued logic and. Inputs are of type bool? or I4, output is of type bool?. Unlike logic.and(), does not have short-circuiting behavior.",
CustomClassName("ThreeValuedBoolAnd"), Binary, ResultType("O")), CustomClassName("ThreeValuedBoolAnd"), Binary, ResultType("O")),
new OpCode("3vl.bool.or", "Three valued logic or. Inputs are of type bool? or I4, output is of type bool?. Unlike logic.or(), does not have short-circuiting behavior.", new OpCode("3vl.bool.or", "Three valued logic or. Inputs are of type bool? or I4, output is of type bool?. Unlike logic.or(), does not have short-circuiting behavior.",

2
ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs

@ -214,13 +214,11 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(Method != null); Debug.Assert(Method != null);
break; break;
case ILFunctionKind.Delegate: case ILFunctionKind.Delegate:
Debug.Assert(Parent != null && !(Parent is Block));
Debug.Assert(DelegateType != null); Debug.Assert(DelegateType != null);
Debug.Assert(DeclarationScope == null); Debug.Assert(DeclarationScope == null);
Debug.Assert(!(DelegateType?.FullName == "System.Linq.Expressions.Expression" && DelegateType.TypeParameterCount == 1)); Debug.Assert(!(DelegateType?.FullName == "System.Linq.Expressions.Expression" && DelegateType.TypeParameterCount == 1));
break; break;
case ILFunctionKind.ExpressionTree: case ILFunctionKind.ExpressionTree:
Debug.Assert(Parent != null && !(Parent is Block));
Debug.Assert(DelegateType != null); Debug.Assert(DelegateType != null);
Debug.Assert(DeclarationScope == null); Debug.Assert(DeclarationScope == null);
Debug.Assert(DelegateType?.FullName == "System.Linq.Expressions.Expression" && DelegateType.TypeParameterCount == 1); Debug.Assert(DelegateType?.FullName == "System.Linq.Expressions.Expression" && DelegateType.TypeParameterCount == 1);

2
ICSharpCode.Decompiler/IL/Instructions/PatternMatching.cs

@ -418,7 +418,7 @@ namespace ICSharpCode.Decompiler.IL
{ {
if (this is LdObj ldobj && ldobj.Target is LdFlda ldflda && ldobj.UnalignedPrefix == 0 && !ldobj.IsVolatile) { if (this is LdObj ldobj && ldobj.Target is LdFlda ldflda && ldobj.UnalignedPrefix == 0 && !ldobj.IsVolatile) {
field = ldflda.Field; field = ldflda.Field;
if (field.DeclaringType.IsReferenceType == true || !ldflda.Target.MatchAddressOf(out target)) { if (field.DeclaringType.IsReferenceType == true || !ldflda.Target.MatchAddressOf(out target, out _)) {
target = ldflda.Target; target = ldflda.Target;
} }
return true; return true;

2
ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

@ -493,7 +493,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
AddExistingName(reservedVariableNames, v.Name); AddExistingName(reservedVariableNames, v.Name);
} }
} }
foreach (var f in rootFunction.Method.DeclaringTypeDefinition.Fields.Select(f => f.Name)) foreach (var f in rootFunction.Method.DeclaringTypeDefinition.GetFields().Select(f => f.Name))
AddExistingName(reservedVariableNames, f); AddExistingName(reservedVariableNames, f);
return reservedVariableNames; return reservedVariableNames;
} }

2
ICSharpCode.Decompiler/IL/Transforms/EarlyExpressionTransforms.cs

@ -95,7 +95,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
temp = ldfldaTarget; temp = ldfldaTarget;
range = range.Concat(temp.ILRanges); range = range.Concat(temp.ILRanges);
} }
if (temp.MatchAddressOf(out var addressOfTarget) && addressOfTarget.MatchLdLoc(out var v)) { if (temp.MatchAddressOf(out var addressOfTarget, out _) && addressOfTarget.MatchLdLoc(out var v)) {
context.Step($"ldobj(...(addressof(ldloca {v.Name}))) => ldobj(...(ldloca {v.Name}))", inst); context.Step($"ldobj(...(addressof(ldloca {v.Name}))) => ldobj(...(ldloca {v.Name}))", inst);
var replacement = new LdLoca(v).WithILRange(addressOfTarget); var replacement = new LdLoca(v).WithILRange(addressOfTarget);
foreach (var r in range) { foreach (var r in range) {

3
ICSharpCode.Decompiler/IL/Transforms/ILInlining.cs

@ -226,7 +226,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (loadInst.OpCode == OpCode.LdLoca) { if (loadInst.OpCode == OpCode.LdLoca) {
// it was an ldloca instruction, so we need to use the pseudo-opcode 'addressof' // it was an ldloca instruction, so we need to use the pseudo-opcode 'addressof'
// to preserve the semantics of the compiler-generated temporary // to preserve the semantics of the compiler-generated temporary
loadInst.ReplaceWith(new AddressOf(inlinedExpression)); Debug.Assert(((LdLoca)loadInst).Variable == v);
loadInst.ReplaceWith(new AddressOf(inlinedExpression, v.Type));
} else { } else {
loadInst.ReplaceWith(inlinedExpression); loadInst.ReplaceWith(inlinedExpression);
} }

13
ICSharpCode.Decompiler/IL/Transforms/LocalFunctionDecompiler.cs

@ -44,6 +44,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
struct LocalFunctionInfo struct LocalFunctionInfo
{ {
public List<CallInstruction> UseSites; public List<CallInstruction> UseSites;
public IMethod Method;
public ILFunction Definition; public ILFunction Definition;
} }
@ -70,8 +71,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms
var cancellationToken = context.CancellationToken; var cancellationToken = context.CancellationToken;
// Find all local functions declared inside this method, including nested local functions or local functions declared in lambdas. // Find all local functions declared inside this method, including nested local functions or local functions declared in lambdas.
FindUseSites(function, context, localFunctions); FindUseSites(function, context, localFunctions);
foreach (var (method, info) in localFunctions) { foreach (var (_, info) in localFunctions) {
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
if (info.Definition == null) {
function.Warnings.Add($"Could not decode local function '{info.Method}'");
continue;
}
var firstUseSite = info.UseSites[0]; var firstUseSite = info.UseSites[0];
context.StepStartGroup($"Transform " + info.Definition.Name, info.Definition); context.StepStartGroup($"Transform " + info.Definition.Name, info.Definition);
try { try {
@ -126,10 +132,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms
context.StepStartGroup($"Read local function '{targetMethod.Name}'", inst); context.StepStartGroup($"Read local function '{targetMethod.Name}'", inst);
info = new LocalFunctionInfo() { info = new LocalFunctionInfo() {
UseSites = new List<CallInstruction>() { inst }, UseSites = new List<CallInstruction>() { inst },
Method = targetMethod,
Definition = ReadLocalFunctionDefinition(context.Function, targetMethod) Definition = ReadLocalFunctionDefinition(context.Function, targetMethod)
}; };
localFunctions.Add((MethodDefinitionHandle)targetMethod.MetadataToken, info); localFunctions.Add((MethodDefinitionHandle)targetMethod.MetadataToken, info);
FindUseSites(info.Definition, context, localFunctions); if (info.Definition != null) {
FindUseSites(info.Definition, context, localFunctions);
}
context.StepEndGroup(); context.StepEndGroup();
} else { } else {
info.UseSites.Add(inst); info.UseSites.Add(inst);

2
ICSharpCode.Decompiler/IL/Transforms/NullPropagationTransform.cs

@ -203,7 +203,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false; // setter/adder/remover cannot be called with ?. syntax return false; // setter/adder/remover cannot be called with ?. syntax
} }
inst = call.Arguments[0]; inst = call.Arguments[0];
if ((call.ConstrainedTo ?? call.Method.DeclaringType).IsReferenceType == false && inst.MatchAddressOf(out var arg)) { if ((call.ConstrainedTo ?? call.Method.DeclaringType).IsReferenceType == false && inst.MatchAddressOf(out var arg, out _)) {
inst = arg; inst = arg;
} }
// ensure the access chain does not contain any 'nullable.unwrap' that aren't directly part of the chain // ensure the access chain does not contain any 'nullable.unwrap' that aren't directly part of the chain

17
ICSharpCode.Decompiler/IL/Transforms/ProxyCallReplacer.cs

@ -30,13 +30,12 @@ namespace ICSharpCode.Decompiler.IL.Transforms
MethodDefinition methodDef = metadata.GetMethodDefinition((MethodDefinitionHandle)inst.Method.MetadataToken); MethodDefinition methodDef = metadata.GetMethodDefinition((MethodDefinitionHandle)inst.Method.MetadataToken);
if (!methodDef.HasBody()) if (!methodDef.HasBody())
return; return;
var genericContext = DelegateConstruction.GenericContextFromTypeArguments(inst.Method.Substitution); // Use the callee's generic context
if (genericContext == null) var genericContext = new GenericContext(inst.Method);
return;
// partially copied from CSharpDecompiler // partially copied from CSharpDecompiler
var ilReader = context.CreateILReader(); var ilReader = context.CreateILReader();
var body = context.PEFile.Reader.GetMethodBody(methodDef.RelativeVirtualAddress); var body = context.PEFile.Reader.GetMethodBody(methodDef.RelativeVirtualAddress);
var proxyFunction = ilReader.ReadIL(handle, body, genericContext.Value, ILFunctionKind.TopLevelFunction, context.CancellationToken); var proxyFunction = ilReader.ReadIL(handle, body, genericContext, ILFunctionKind.TopLevelFunction, context.CancellationToken);
var transformContext = new ILTransformContext(context, proxyFunction); var transformContext = new ILTransformContext(context, proxyFunction);
proxyFunction.RunTransforms(CSharp.CSharpDecompiler.EarlyILTransforms(), transformContext); proxyFunction.RunTransforms(CSharp.CSharpDecompiler.EarlyILTransforms(), transformContext);
if (!(proxyFunction.Body is BlockContainer blockContainer)) if (!(proxyFunction.Body is BlockContainer blockContainer))
@ -81,8 +80,14 @@ namespace ICSharpCode.Decompiler.IL.Transforms
} }
} }
context.Step("Replace proxy: " + inst.Method.Name + " with " + call.Method.Name, inst); context.Step("Replace proxy: " + inst.Method.Name + " with " + call.Method.Name, inst);
Call newInst = (Call)call.Clone(); // Apply the wrapper call's substitution to the actual method call.
Call newInst = new Call(call.Method.Specialize(inst.Method.Substitution));
// copy flags
newInst.ConstrainedTo = call.ConstrainedTo;
newInst.ILStackWasEmpty = inst.ILStackWasEmpty;
newInst.IsTail = call.IsTail & inst.IsTail;
// copy IL ranges
newInst.AddILRange(inst);
newInst.Arguments.ReplaceList(inst.Arguments); newInst.Arguments.ReplaceList(inst.Arguments);
inst.ReplaceWith(newInst); inst.ReplaceWith(newInst);
} }

2
ICSharpCode.Decompiler/IL/Transforms/SwitchOnStringTransform.cs

@ -203,6 +203,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
switchValue = new LdLoc(switchValueVar); switchValue = new LdLoc(switchValueVar);
} }
} else { } else {
// Instruction before the start of the switch is not related to the switch.
keepAssignmentBefore = true;
switchValue = new LdLoc(switchValueVar); switchValue = new LdLoc(switchValueVar);
} }
// if instruction must be followed by a branch to the next case // if instruction must be followed by a branch to the next case

4
ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs

@ -541,7 +541,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (target.ResultType == StackType.Ref) if (target.ResultType == StackType.Ref)
return target; return target;
else else
return new AddressOf(target); return new AddressOf(target, expectedType);
case StackType.O: case StackType.O:
if (targetType.IsReferenceType == false) { if (targetType.IsReferenceType == false) {
return new Box(target, targetType); return new Box(target, targetType);
@ -721,7 +721,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (member.DeclaringType.IsReferenceType == true) { if (member.DeclaringType.IsReferenceType == true) {
inst = new LdFlda(target, (IField)member); inst = new LdFlda(target, (IField)member);
} else { } else {
inst = new LdFlda(new AddressOf(target), (IField)member); inst = new LdFlda(new AddressOf(target, member.DeclaringType), (IField)member);
} }
} }
if (typeHint.SkipModifiers() is ByReferenceType brt && !member.ReturnType.IsByRefLike) { if (typeHint.SkipModifiers() is ByReferenceType brt && !member.ReturnType.IsByRefLike) {

2
ICSharpCode.Decompiler/IL/Transforms/UsingTransform.cs

@ -224,7 +224,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false; return false;
var firstArg = callVirt.Arguments.FirstOrDefault(); var firstArg = callVirt.Arguments.FirstOrDefault();
if (!(firstArg.MatchUnboxAny(out var innerArg1, out var unboxType) && unboxType.IsKnownType(KnownTypeCode.IDisposable))) { if (!(firstArg.MatchUnboxAny(out var innerArg1, out var unboxType) && unboxType.IsKnownType(KnownTypeCode.IDisposable))) {
if (!firstArg.MatchAddressOf(out var innerArg2)) if (!firstArg.MatchAddressOf(out var innerArg2, out _))
return false; return false;
return NullableLiftingTransform.MatchGetValueOrDefault(innerArg2, objVar) return NullableLiftingTransform.MatchGetValueOrDefault(innerArg2, objVar)
|| (innerArg2 is NullableUnwrap unwrap || (innerArg2 is NullableUnwrap unwrap

4
ICSharpCode.Decompiler/Metadata/OperandType.cs

@ -94,7 +94,9 @@ namespace ICSharpCode.Decompiler.Metadata
"vararg", "variant", "vector", "virtual", "void", "wchar", "winapi", "with", "wrapper", "vararg", "variant", "vector", "virtual", "void", "wchar", "winapi", "with", "wrapper",
// These are not listed as keywords in spec, but ILAsm treats them as such // These are not listed as keywords in spec, but ILAsm treats them as such
"property", "type", "flags", "callconv", "strict" "property", "type", "flags", "callconv", "strict",
// ILDasm uses these keywords for unsigned integers
"uint8", "uint16", "uint32", "uint64"
); );
} }

2
ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

@ -26,7 +26,7 @@ using System.Text;
namespace ICSharpCode.Decompiler.Metadata namespace ICSharpCode.Decompiler.Metadata
{ {
// This inspired by Mono.Cecil's BaseAssemblyResolver/DefaultAssemblyResolver. // This is inspired by Mono.Cecil's BaseAssemblyResolver/DefaultAssemblyResolver.
public class UniversalAssemblyResolver : IAssemblyResolver public class UniversalAssemblyResolver : IAssemblyResolver
{ {
static UniversalAssemblyResolver() static UniversalAssemblyResolver()

1
ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultTypeParameter.cs

@ -28,7 +28,6 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
readonly bool hasReferenceTypeConstraint; readonly bool hasReferenceTypeConstraint;
readonly bool hasDefaultConstructorConstraint; readonly bool hasDefaultConstructorConstraint;
readonly Nullability nullabilityConstraint; readonly Nullability nullabilityConstraint;
readonly IReadOnlyList<IType> constraints;
readonly IReadOnlyList<IAttribute> attributes; readonly IReadOnlyList<IAttribute> attributes;
public DefaultTypeParameter( public DefaultTypeParameter(

2
ICSharpCode.Decompiler/TypeSystem/Implementation/KnownAttributes.cs

@ -63,6 +63,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
IsByRefLike, IsByRefLike,
IteratorStateMachine, IteratorStateMachine,
AsyncStateMachine, AsyncStateMachine,
AsyncMethodBuilder,
// Field attributes: // Field attributes:
FieldOffset, FieldOffset,
@ -129,6 +130,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
new TopLevelTypeName("System.Runtime.CompilerServices", "IsByRefLikeAttribute"), new TopLevelTypeName("System.Runtime.CompilerServices", "IsByRefLikeAttribute"),
new TopLevelTypeName("System.Runtime.CompilerServices", nameof(IteratorStateMachineAttribute)), new TopLevelTypeName("System.Runtime.CompilerServices", nameof(IteratorStateMachineAttribute)),
new TopLevelTypeName("System.Runtime.CompilerServices", nameof(AsyncStateMachineAttribute)), new TopLevelTypeName("System.Runtime.CompilerServices", nameof(AsyncStateMachineAttribute)),
new TopLevelTypeName("System.Runtime.CompilerServices", "AsyncMethodBuilderAttribute"),
// Field attributes: // Field attributes:
new TopLevelTypeName("System.Runtime.InteropServices", nameof(FieldOffsetAttribute)), new TopLevelTypeName("System.Runtime.InteropServices", nameof(FieldOffsetAttribute)),
new TopLevelTypeName("System", nameof(NonSerializedAttribute)), new TopLevelTypeName("System", nameof(NonSerializedAttribute)),

62
ICSharpCode.Decompiler/TypeSystem/TaskType.cs

@ -54,7 +54,67 @@ namespace ICSharpCode.Decompiler.TypeSystem
} }
return false; return false;
} }
/// <summary>
/// Gets whether the specified type is a Task-like type.
/// </summary>
public static bool IsCustomTask(IType type, out IType builderType)
{
builderType = null;
ITypeDefinition def = type.GetDefinition();
if (def != null) {
if (def.TypeParameterCount > 1)
return false;
var attribute = def.GetAttribute(KnownAttribute.AsyncMethodBuilder);
if (attribute == null || attribute.FixedArguments.Length != 1)
return false;
var arg = attribute.FixedArguments[0];
if (!arg.Type.IsKnownType(KnownTypeCode.Type))
return false;
builderType = (IType)arg.Value;
return true;
}
return false;
}
const string ns = "System.Runtime.CompilerServices";
/// <summary>
/// Gets whether the specified type is a non-generic Task-like type.
/// </summary>
/// <param name="builderTypeName">Returns the full type-name of the builder type, if successful.</param>
public static bool IsNonGenericTaskType(IType task, out FullTypeName builderTypeName)
{
if (task.IsKnownType(KnownTypeCode.Task)) {
builderTypeName = new TopLevelTypeName(ns, "AsyncTaskMethodBuilder");
return true;
}
if (IsCustomTask(task, out var builderType)) {
builderTypeName = new FullTypeName(builderType.ReflectionName);
return builderTypeName.TypeParameterCount == 0;
}
builderTypeName = default;
return false;
}
/// <summary>
/// Gets whether the specified type is a generic Task-like type.
/// </summary>
/// <param name="builderTypeName">Returns the full type-name of the builder type, if successful.</param>
public static bool IsGenericTaskType(IType task, out FullTypeName builderTypeName)
{
if (task.IsKnownType(KnownTypeCode.TaskOfT)) {
builderTypeName = new TopLevelTypeName(ns, "AsyncTaskMethodBuilder", 1);
return true;
}
if (IsCustomTask(task, out var builderType)) {
builderTypeName = new FullTypeName(builderType.ReflectionName);
return builderTypeName.TypeParameterCount == 1;
}
builderTypeName = default;
return false;
}
/// <summary> /// <summary>
/// Creates a task type. /// Creates a task type.
/// </summary> /// </summary>

2
ILSpy.AddIn/Commands/OpenReferenceCommand.cs

@ -59,12 +59,14 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
OpenAssembliesInILSpy(parameters); OpenAssembliesInILSpy(parameters);
else else
owner.ShowMessage("Could not find reference '{0}', please ensure the project and all references were built correctly!", reference.Name); owner.ShowMessage("Could not find reference '{0}', please ensure the project and all references were built correctly!", reference.Name);
return;
} }
// Handle NuGet references // Handle NuGet references
var nugetRefItem = NuGetReferenceForILSpy.Detect(itemObject); var nugetRefItem = NuGetReferenceForILSpy.Detect(itemObject);
if (nugetRefItem != null) { if (nugetRefItem != null) {
OpenAssembliesInILSpy(nugetRefItem.GetILSpyParameters()); OpenAssembliesInILSpy(nugetRefItem.GetILSpyParameters());
return;
} }
// Handle project references // Handle project references

6
ILSpy.AddIn/ILSpy.AddIn.csproj

@ -7,7 +7,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<TargetFramework>net462</TargetFramework> <TargetFramework>net472</TargetFramework>
<RootNamespace>ICSharpCode.ILSpy.AddIn</RootNamespace> <RootNamespace>ICSharpCode.ILSpy.AddIn</RootNamespace>
<Company>IC#Code</Company> <Company>IC#Code</Company>
@ -114,7 +114,6 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<AdditionalDependencies Include="$(ILSpyBuildPath)System.ValueTuple.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)System.Collections.Immutable.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)System.Collections.Immutable.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)System.Composition.AttributedModel.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)System.Composition.AttributedModel.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)System.Composition.Convention.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)System.Composition.Convention.dll" />
@ -130,8 +129,7 @@
<AdditionalDependencies Include="$(ILSpyBuildPath)Mono.Cecil.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)Mono.Cecil.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)Mono.Cecil.Pdb.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)Mono.Cecil.Pdb.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)ILSpy.BamlDecompiler.Plugin.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)ILSpy.BamlDecompiler.Plugin.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)System.*.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)Microsoft.DiaSymReader*.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)Microsoft.DiaSymReader.*.dll" />
<AdditionalDependencies Include="$(ILSpyBuildPath)OSVersionHelper.dll" /> <AdditionalDependencies Include="$(ILSpyBuildPath)OSVersionHelper.dll" />
</ItemGroup> </ItemGroup>

2
ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj

@ -2,7 +2,7 @@
<Project Sdk="MSBuild.Sdk.Extras"> <Project Sdk="MSBuild.Sdk.Extras">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net462</TargetFramework> <TargetFramework>net472</TargetFramework>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo> <GenerateAssemblyInfo>False</GenerateAssemblyInfo>

4
ILSpy.BamlDecompiler/ILSpy.BamlDecompiler.csproj

@ -3,7 +3,7 @@
<Import Sdk="Microsoft.NET.Sdk" Project="Sdk.props" /> <Import Sdk="Microsoft.NET.Sdk" Project="Sdk.props" />
<PropertyGroup> <PropertyGroup>
<TargetFramework>net462</TargetFramework> <TargetFramework>net472</TargetFramework>
<AssemblyName>ILSpy.BamlDecompiler.Plugin</AssemblyName> <AssemblyName>ILSpy.BamlDecompiler.Plugin</AssemblyName>
<LangVersion>7.2</LangVersion> <LangVersion>7.2</LangVersion>
@ -37,7 +37,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AvalonEdit" Version="6.0.0-preview1" /> <PackageReference Include="AvalonEdit" Version="6.0.0-rc1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

16
ILSpy.Package/ILSpy.Package.wapproj

@ -20,22 +20,6 @@
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|AnyCPU"> <ProjectConfiguration Include="Debug|AnyCPU">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>AnyCPU</Platform> <Platform>AnyCPU</Platform>

BIN
ILSpy.Package/Images/StoreLogo.backup.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

2
ILSpy.Package/Package-CI.appxmanifest

@ -15,7 +15,7 @@
<Properties> <Properties>
<DisplayName>ILSpy (CI)</DisplayName> <DisplayName>ILSpy (CI)</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName> <PublisherDisplayName>CN=ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo> <Logo>Images\StoreLogo.png</Logo>
</Properties> </Properties>

2
ILSpy.Package/Package-Local.appxmanifest

@ -15,7 +15,7 @@
<Properties> <Properties>
<DisplayName>ILSpy (Local)</DisplayName> <DisplayName>ILSpy (Local)</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName> <PublisherDisplayName>CN=ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo> <Logo>Images\StoreLogo.png</Logo>
</Properties> </Properties>

6
ILSpy.Package/Package.appxmanifest

@ -9,13 +9,13 @@
IgnorableNamespaces="uap rescap"> IgnorableNamespaces="uap rescap">
<Identity <Identity
Name="ICSharpCode.ILSpy" Name="17310ICSharpCodeTeam.ILSpy"
Publisher="CN=ICSharpCode" Publisher="CN=2A240D0E-77E6-4732-9B57-AD934336A43E"
Version="$INSERTMAJORVERSION$.$INSERTMINORVERSION$.$INSERTREVISION$.0" /> Version="$INSERTMAJORVERSION$.$INSERTMINORVERSION$.$INSERTREVISION$.0" />
<Properties> <Properties>
<DisplayName>ILSpy</DisplayName> <DisplayName>ILSpy</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName> <PublisherDisplayName>ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo> <Logo>Images\StoreLogo.png</Logo>
</Properties> </Properties>

2
ILSpy.Tests/ILSpy.Tests.csproj

@ -2,7 +2,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net462</TargetFramework> <TargetFramework>net472</TargetFramework>
<LangVersion>7.3</LangVersion> <LangVersion>7.3</LangVersion>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>

96
ILSpy.WithPackage.sln

@ -44,213 +44,129 @@ EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64 Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|Any CPU.Build.0 = Debug|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|ARM64.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x64.ActiveCfg = Debug|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x64.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x64.Build.0 = Debug|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x64.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x86.ActiveCfg = Debug|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x86.ActiveCfg = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x86.Build.0 = Debug|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Debug|x86.Build.0 = Debug|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|Any CPU.ActiveCfg = Release|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|Any CPU.Build.0 = Release|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|Any CPU.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM64.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|ARM64.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x64.ActiveCfg = Release|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x64.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x64.Build.0 = Release|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x64.Build.0 = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x86.ActiveCfg = Release|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x86.ActiveCfg = Release|Any CPU
{1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x86.Build.0 = Release|Any CPU {1E85EFF9-E370-4683-83E4-8A3D063FF791}.Release|x86.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Any CPU.Build.0 = Debug|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|ARM64.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x64.ActiveCfg = Debug|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x64.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x64.Build.0 = Debug|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x64.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.ActiveCfg = Debug|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.ActiveCfg = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.Build.0 = Debug|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.Build.0 = Debug|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.Build.0 = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Any CPU.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM64.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|ARM64.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x64.ActiveCfg = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x64.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x64.Build.0 = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x64.Build.0 = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|Any CPU.Build.0 = Debug|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|ARM64.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x64.ActiveCfg = Debug|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x64.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x64.Build.0 = Debug|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x64.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x86.ActiveCfg = Debug|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x86.ActiveCfg = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x86.Build.0 = Debug|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Debug|x86.Build.0 = Debug|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|Any CPU.ActiveCfg = Release|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|Any CPU.Build.0 = Release|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Release|Any CPU.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM64.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|ARM64.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x64.ActiveCfg = Release|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x64.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x64.Build.0 = Release|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x64.Build.0 = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x86.ActiveCfg = Release|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x86.ActiveCfg = Release|Any CPU
{984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x86.Build.0 = Release|Any CPU {984CC812-9470-4A13-AFF9-CC44068D666C}.Release|x86.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|Any CPU.Build.0 = Debug|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|ARM64.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x64.ActiveCfg = Debug|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x64.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x64.Build.0 = Debug|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x64.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x86.ActiveCfg = Debug|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x86.ActiveCfg = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x86.Build.0 = Debug|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Debug|x86.Build.0 = Debug|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|Any CPU.ActiveCfg = Release|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|Any CPU.Build.0 = Release|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|Any CPU.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM64.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|ARM64.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x64.ActiveCfg = Release|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x64.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x64.Build.0 = Release|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x64.Build.0 = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x86.ActiveCfg = Release|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x86.ActiveCfg = Release|Any CPU
{FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x86.Build.0 = Release|Any CPU {FEC0DA52-C4A6-4710-BE36-B484A20C5E22}.Release|x86.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|Any CPU.Build.0 = Debug|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|ARM64.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x64.ActiveCfg = Debug|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x64.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x64.Build.0 = Debug|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x64.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x86.ActiveCfg = Debug|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x86.ActiveCfg = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x86.Build.0 = Debug|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Debug|x86.Build.0 = Debug|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|Any CPU.ActiveCfg = Release|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|Any CPU.Build.0 = Release|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|Any CPU.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM64.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|ARM64.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x64.ActiveCfg = Release|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x64.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x64.Build.0 = Release|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x64.Build.0 = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x86.ActiveCfg = Release|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x86.ActiveCfg = Release|Any CPU
{F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x86.Build.0 = Release|Any CPU {F32EBCC8-0E53-4421-867E-05B3D6E10C70}.Release|x86.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|Any CPU.Build.0 = Debug|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|ARM64.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x64.ActiveCfg = Debug|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x64.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x64.Build.0 = Debug|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x64.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x86.ActiveCfg = Debug|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x86.ActiveCfg = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x86.Build.0 = Debug|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Debug|x86.Build.0 = Debug|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|Any CPU.ActiveCfg = Release|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|Any CPU.Build.0 = Release|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|Any CPU.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM64.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|ARM64.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x64.ActiveCfg = Release|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x64.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x64.Build.0 = Release|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x64.Build.0 = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x86.ActiveCfg = Release|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x86.ActiveCfg = Release|Any CPU
{A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x86.Build.0 = Release|Any CPU {A6BAD2BA-76BA-461C-8B6D-418607591247}.Release|x86.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|Any CPU.Build.0 = Debug|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|ARM64.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x64.ActiveCfg = Debug|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x64.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x64.Build.0 = Debug|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x64.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x86.ActiveCfg = Debug|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x86.ActiveCfg = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x86.Build.0 = Debug|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Debug|x86.Build.0 = Debug|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|Any CPU.ActiveCfg = Release|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|Any CPU.Build.0 = Release|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Release|Any CPU.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM64.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|ARM64.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x64.ActiveCfg = Release|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x64.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x64.Build.0 = Release|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x64.Build.0 = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x86.ActiveCfg = Release|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x86.ActiveCfg = Release|Any CPU
{1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x86.Build.0 = Release|Any CPU {1169E6D1-1899-43D4-A500-07CE4235B388}.Release|x86.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|Any CPU.Build.0 = Debug|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|ARM64.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x64.ActiveCfg = Debug|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x64.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x64.Build.0 = Debug|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x64.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x86.ActiveCfg = Debug|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x86.ActiveCfg = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x86.Build.0 = Debug|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Debug|x86.Build.0 = Debug|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|Any CPU.ActiveCfg = Release|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|Any CPU.Build.0 = Release|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|Any CPU.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM64.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|ARM64.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x64.ActiveCfg = Release|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x64.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x64.Build.0 = Release|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x64.Build.0 = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x86.ActiveCfg = Release|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x86.ActiveCfg = Release|Any CPU
{9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x86.Build.0 = Release|Any CPU {9D7BE6C0-B7B3-4A50-A54E-18A2D84A3384}.Release|x86.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|Any CPU.Build.0 = Debug|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|ARM64.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x64.ActiveCfg = Debug|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x64.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x64.Build.0 = Debug|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x64.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x86.ActiveCfg = Debug|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x86.ActiveCfg = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x86.Build.0 = Debug|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Debug|x86.Build.0 = Debug|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|Any CPU.ActiveCfg = Release|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|Any CPU.Build.0 = Release|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|Any CPU.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM64.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|ARM64.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x64.ActiveCfg = Release|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x64.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x64.Build.0 = Release|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x64.Build.0 = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x86.ActiveCfg = Release|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x86.ActiveCfg = Release|Any CPU
{B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x86.Build.0 = Release|Any CPU {B85A155A-9DD6-43BC-A624-2D8EC773D71F}.Release|x86.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|ARM64.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x64.ActiveCfg = Debug|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x64.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x64.Build.0 = Debug|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x64.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x86.ActiveCfg = Debug|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x86.ActiveCfg = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x86.Build.0 = Debug|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Debug|x86.Build.0 = Debug|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|Any CPU.Build.0 = Release|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|Any CPU.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM64.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|ARM64.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x64.ActiveCfg = Release|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x64.ActiveCfg = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x64.Build.0 = Release|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x64.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x86.ActiveCfg = Release|Any CPU {B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x86.ActiveCfg = Release|Any CPU
@ -258,12 +174,6 @@ Global
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.Build.0 = Debug|Any CPU {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM.ActiveCfg = Debug|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM.Build.0 = Debug|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM.Deploy.0 = Debug|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM64.ActiveCfg = Debug|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM64.Build.0 = Debug|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|ARM64.Deploy.0 = Debug|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.ActiveCfg = Debug|x64 {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.ActiveCfg = Debug|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Build.0 = Debug|x64 {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Build.0 = Debug|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Deploy.0 = Debug|x64 {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Deploy.0 = Debug|x64
@ -273,12 +183,6 @@ Global
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.ActiveCfg = Release|Any CPU {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.Build.0 = Release|Any CPU {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.Build.0 = Release|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.Deploy.0 = Release|Any CPU {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|Any CPU.Deploy.0 = Release|Any CPU
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM.ActiveCfg = Release|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM.Build.0 = Release|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM.Deploy.0 = Release|ARM
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM64.ActiveCfg = Release|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM64.Build.0 = Release|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|ARM64.Deploy.0 = Release|ARM64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.ActiveCfg = Release|x64 {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.ActiveCfg = Release|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.Build.0 = Release|x64 {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.Build.0 = Release|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.Deploy.0 = Release|x64 {BAB51A23-9C15-42CC-8465-EB732BF9A932}.Release|x64.Deploy.0 = Release|x64

2
ILSpy/Analyzers/AnalyzeCommand.cs

@ -25,7 +25,7 @@ using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.Analyzers namespace ICSharpCode.ILSpy.Analyzers
{ {
[ExportContextMenuEntry(Header = nameof(Resources.Analyze), Icon = "images/Search.png", Category = nameof(Resources.Analyze), InputGestureText = "Ctrl+R", Order = 100)] [ExportContextMenuEntry(Header = nameof(Resources.Analyze), Icon = "Images/Search", Category = nameof(Resources.Analyze), InputGestureText = "Ctrl+R", Order = 100)]
internal sealed class AnalyzeCommand : SimpleCommand, IContextMenuEntry internal sealed class AnalyzeCommand : SimpleCommand, IContextMenuEntry
{ {
public bool IsVisible(TextViewContext context) public bool IsVisible(TextViewContext context)

13
ILSpy/Analyzers/Builtin/EventImplementsInterfaceAnalyzer.cs

@ -42,15 +42,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type) IEnumerable<IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type)
{ {
var token = analyzedEntity.DeclaringTypeDefinition.MetadataToken; var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile; var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
if (!type.GetAllBaseTypeDefinitions() var allTypes = type.GetAllBaseTypeDefinitions();
.Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module)) if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break; yield break;
foreach (var @event in type.GetEvents(options: GetMemberOptions.ReturnMemberDefinitions)) { foreach (var @event in type.Events) {
if (InheritanceHelper.GetBaseMembers(@event, true) var baseMembers = InheritanceHelper.GetBaseMembers(@event, true);
.Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module)) if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
yield return @event; yield return @event;
} }
} }

12
ILSpy/Analyzers/Builtin/EventOverriddenByAnalyzer.cs

@ -42,15 +42,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type) IEnumerable<IEntity> AnalyzeType(IEvent analyzedEntity, ITypeDefinition type)
{ {
if (!analyzedEntity.DeclaringType.GetAllBaseTypeDefinitions() var token = analyzedEntity.MetadataToken;
.Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken && t.ParentModule.PEFile == type.ParentModule.PEFile)) var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break; yield break;
foreach (var @event in type.Events) { foreach (var @event in type.Events) {
if (!@event.IsOverride) continue; if (!@event.IsOverride) continue;
if (InheritanceHelper.GetBaseMembers(@event, false) var baseMembers = InheritanceHelper.GetBaseMembers(@event, false);
.Any(p => p.MetadataToken == analyzedEntity.MetadataToken && if (baseMembers.Any(p => p.MetadataToken == token && p.ParentModule.PEFile == module)) {
p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) {
yield return @event; yield return @event;
} }
} }

13
ILSpy/Analyzers/Builtin/MethodImplementsInterfaceAnalyzer.cs

@ -45,15 +45,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type) IEnumerable<IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type)
{ {
var token = analyzedEntity.DeclaringTypeDefinition.MetadataToken; var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile; var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
if (!type.GetAllBaseTypeDefinitions() var allTypes = type.GetAllBaseTypeDefinitions();
.Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module)) if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break; yield break;
foreach (var method in type.GetMethods(options: GetMemberOptions.ReturnMemberDefinitions)) { foreach (var method in type.Methods) {
if (InheritanceHelper.GetBaseMembers(method, true) var baseMembers = InheritanceHelper.GetBaseMembers(method, true);
.Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module)) if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
yield return method; yield return method;
} }
} }

13
ILSpy/Analyzers/Builtin/MethodOverriddenByAnalyzer.cs

@ -44,16 +44,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type) IEnumerable<IEntity> AnalyzeType(IMethod analyzedEntity, ITypeDefinition type)
{ {
if (!type.GetAllBaseTypeDefinitions() var token = analyzedEntity.MetadataToken;
.Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
&& t.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break; yield break;
foreach (var method in type.Methods) { foreach (var method in type.Methods) {
if (!method.IsOverride) continue; if (!method.IsOverride) continue;
if (InheritanceHelper.GetBaseMembers(method, false) var baseMembers = InheritanceHelper.GetBaseMembers(method, false);
.Any(p => p.MetadataToken == analyzedEntity.MetadataToken && if (baseMembers.Any(p => p.MetadataToken == token && p.ParentModule.PEFile == module)) {
p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) {
yield return method; yield return method;
} }
} }

13
ILSpy/Analyzers/Builtin/PropertyImplementsInterfaceAnalyzer.cs

@ -42,15 +42,16 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IProperty analyzedEntity, ITypeDefinition type) IEnumerable<IEntity> AnalyzeType(IProperty analyzedEntity, ITypeDefinition type)
{ {
var token = analyzedEntity.DeclaringTypeDefinition.MetadataToken; var token = analyzedEntity.MetadataToken;
var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile; var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
if (!type.GetAllBaseTypeDefinitions() var allTypes = type.GetAllBaseTypeDefinitions();
.Any(t => t.MetadataToken == token && t.ParentModule.PEFile == module)) if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break; yield break;
foreach (var property in type.GetProperties(options: GetMemberOptions.ReturnMemberDefinitions)) { foreach (var property in type.Properties) {
if (InheritanceHelper.GetBaseMembers(property, true) var baseMembers = InheritanceHelper.GetBaseMembers(property, true);
.Any(m => m.DeclaringTypeDefinition.MetadataToken == token && m.ParentModule.PEFile == module)) if (baseMembers.Any(m => m.MetadataToken == token && m.ParentModule.PEFile == module))
yield return property; yield return property;
} }
} }

12
ILSpy/Analyzers/Builtin/PropertyOverriddenByAnalyzer.cs

@ -45,15 +45,17 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
IEnumerable<IEntity> AnalyzeType(IProperty analyzedEntity, ITypeDefinition type) IEnumerable<IEntity> AnalyzeType(IProperty analyzedEntity, ITypeDefinition type)
{ {
if (!analyzedEntity.DeclaringType.GetAllBaseTypeDefinitions() var token = analyzedEntity.MetadataToken;
.Any(t => t.MetadataToken == analyzedEntity.DeclaringTypeDefinition.MetadataToken && t.ParentModule.PEFile == type.ParentModule.PEFile)) var declaringTypeToken = analyzedEntity.DeclaringTypeDefinition.MetadataToken;
var module = analyzedEntity.DeclaringTypeDefinition.ParentModule.PEFile;
var allTypes = type.GetAllBaseTypeDefinitions();
if (!allTypes.Any(t => t.MetadataToken == declaringTypeToken && t.ParentModule.PEFile == module))
yield break; yield break;
foreach (var property in type.Properties) { foreach (var property in type.Properties) {
if (!property.IsOverride) continue; if (!property.IsOverride) continue;
if (InheritanceHelper.GetBaseMembers(property, false) var baseMembers = InheritanceHelper.GetBaseMembers(property, false);
.Any(p => p.MetadataToken == analyzedEntity.MetadataToken && if (baseMembers.Any(p => p.MetadataToken == token && p.ParentModule.PEFile == module)) {
p.ParentModule.PEFile == analyzedEntity.ParentModule.PEFile)) {
yield return property; yield return property;
} }
} }

2
ILSpy/Commands/BrowseBackCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportToolbarCommand(ToolTip = nameof(Resources.Back), ToolbarIcon = "Images/Back.png", ToolbarCategory = nameof(Resources.Navigation), ToolbarOrder = 0)] [ExportToolbarCommand(ToolTip = nameof(Resources.Back), ToolbarIcon = "Images/Back", ToolbarCategory = nameof(Resources.Navigation), ToolbarOrder = 0)]
sealed class BrowseBackCommand : CommandWrapper sealed class BrowseBackCommand : CommandWrapper
{ {
public BrowseBackCommand() public BrowseBackCommand()

2
ILSpy/Commands/BrowseForwardCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportToolbarCommand(ToolTip = nameof(Resources.Forward), ToolbarIcon = "Images/Forward.png", ToolbarCategory = nameof(Resources.Navigation), ToolbarOrder = 1)] [ExportToolbarCommand(ToolTip = nameof(Resources.Forward), ToolbarIcon = "Images/Forward", ToolbarCategory = nameof(Resources.Navigation), ToolbarOrder = 1)]
sealed class BrowseForwardCommand : CommandWrapper sealed class BrowseForwardCommand : CommandWrapper
{ {
public BrowseForwardCommand() public BrowseForwardCommand()

4
ILSpy/Commands/OpenCommand.cs

@ -21,8 +21,8 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportToolbarCommand(ToolTip = nameof(Resources.Open), ToolbarIcon = "Images/Open.png", ToolbarCategory = nameof(Resources.Open), ToolbarOrder = 0)] [ExportToolbarCommand(ToolTip = nameof(Resources.Open), ToolbarIcon = "Images/Open", ToolbarCategory = nameof(Resources.Open), ToolbarOrder = 0)]
[ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources._Open), MenuIcon = "Images/Open.png", MenuCategory = nameof(Resources.Open), MenuOrder = 0)] [ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources._Open), MenuIcon = "Images/Open", MenuCategory = nameof(Resources.Open), MenuOrder = 0)]
sealed class OpenCommand : CommandWrapper sealed class OpenCommand : CommandWrapper
{ {
public OpenCommand() public OpenCommand()

2
ILSpy/Commands/OpenFromGacCommand.cs

@ -19,7 +19,7 @@
using ICSharpCode.ILSpy.Properties; using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources.OpenFrom_GAC), MenuIcon = "Images/AssemblyListGAC.png", MenuCategory = nameof(Resources.Open), MenuOrder = 1)] [ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources.OpenFrom_GAC), MenuIcon = "Images/AssemblyListGAC", MenuCategory = nameof(Resources.Open), MenuOrder = 1)]
sealed class OpenFromGacCommand : SimpleCommand sealed class OpenFromGacCommand : SimpleCommand
{ {
public override void Execute(object parameter) public override void Execute(object parameter)

2
ILSpy/Commands/OpenListCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources.Open_List), MenuIcon = "Images/AssemblyList.png", MenuCategory = nameof(Resources.Open), MenuOrder = 1.7)] [ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources.Open_List), MenuIcon = "Images/AssemblyList", MenuCategory = nameof(Resources.Open), MenuOrder = 1.7)]
sealed class OpenListCommand : SimpleCommand sealed class OpenListCommand : SimpleCommand
{ {
public override void Execute(object parameter) public override void Execute(object parameter)

4
ILSpy/Commands/RefreshCommand.cs

@ -21,8 +21,8 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportToolbarCommand(ToolTip = nameof(Resources.RefreshCommand_ReloadAssemblies), ToolbarIcon = "Images/Refresh.png", ToolbarCategory = nameof(Resources.Open), ToolbarOrder = 2)] [ExportToolbarCommand(ToolTip = nameof(Resources.RefreshCommand_ReloadAssemblies), ToolbarIcon = "Images/Refresh", ToolbarCategory = nameof(Resources.Open), ToolbarOrder = 2)]
[ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources._Reload), MenuIcon = "Images/Refresh.png", MenuCategory = nameof(Resources.Open), MenuOrder = 2)] [ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources._Reload), MenuIcon = "Images/Refresh", MenuCategory = nameof(Resources.Open), MenuOrder = 2)]
sealed class RefreshCommand : CommandWrapper sealed class RefreshCommand : CommandWrapper
{ {
public RefreshCommand() public RefreshCommand()

2
ILSpy/Commands/SaveCodeContextMenuEntry.cs

@ -29,7 +29,7 @@ using Microsoft.Win32;
namespace ICSharpCode.ILSpy.TextView namespace ICSharpCode.ILSpy.TextView
{ {
[ExportContextMenuEntry(Header = nameof(Resources._SaveCode), Category = nameof(Resources.Save), Icon = "Images/SaveFile.png")] [ExportContextMenuEntry(Header = nameof(Resources._SaveCode), Category = nameof(Resources.Save), Icon = "Images/Save")]
sealed class SaveCodeContextMenuEntry : IContextMenuEntry sealed class SaveCodeContextMenuEntry : IContextMenuEntry
{ {
public void Execute(TextViewContext context) public void Execute(TextViewContext context)

2
ILSpy/Commands/SaveCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources._SaveCode), MenuIcon = "Images/SaveFile.png", MenuCategory = nameof(Resources.Save), MenuOrder = 0)] [ExportMainMenuCommand(Menu = nameof(Resources._File), Header = nameof(Resources._SaveCode), MenuIcon = "Images/Save", MenuCategory = nameof(Resources.Save), MenuOrder = 0)]
sealed class SaveCommand : CommandWrapper sealed class SaveCommand : CommandWrapper
{ {
public SaveCommand() public SaveCommand()

8
ILSpy/Commands/SortAssemblyListCommand.cs

@ -23,8 +23,8 @@ using ICSharpCode.TreeView;
namespace ICSharpCode.ILSpy namespace ICSharpCode.ILSpy
{ {
[ExportMainMenuCommand(Menu = nameof(Resources._View), Header = nameof(Resources.SortAssembly_listName), MenuIcon = "Images/Sort.png", MenuCategory = nameof(Resources.View))] [ExportMainMenuCommand(Menu = nameof(Resources._View), Header = nameof(Resources.SortAssembly_listName), MenuIcon = "Images/Sort", MenuCategory = nameof(Resources.View))]
[ExportToolbarCommand(ToolTip = nameof(Resources.SortAssemblyListName), ToolbarIcon = "Images/Sort.png", ToolbarCategory = nameof(Resources.View))] [ExportToolbarCommand(ToolTip = nameof(Resources.SortAssemblyListName), ToolbarIcon = "Images/Sort", ToolbarCategory = nameof(Resources.View))]
sealed class SortAssemblyListCommand : SimpleCommand, IComparer<LoadedAssembly> sealed class SortAssemblyListCommand : SimpleCommand, IComparer<LoadedAssembly>
{ {
public override void Execute(object parameter) public override void Execute(object parameter)
@ -39,8 +39,8 @@ namespace ICSharpCode.ILSpy
} }
} }
[ExportMainMenuCommand(Menu = nameof(Resources._View), Header = nameof(Resources._CollapseTreeNodes), MenuIcon = "Images/CollapseAll.png", MenuCategory = nameof(Resources.View))] [ExportMainMenuCommand(Menu = nameof(Resources._View), Header = nameof(Resources._CollapseTreeNodes), MenuIcon = "Images/CollapseAll", MenuCategory = nameof(Resources.View))]
[ExportToolbarCommand(ToolTip = nameof(Resources.CollapseTreeNodes), ToolbarIcon = "Images/CollapseAll.png", ToolbarCategory = nameof(Resources.View))] [ExportToolbarCommand(ToolTip = nameof(Resources.CollapseTreeNodes), ToolbarIcon = "Images/CollapseAll", ToolbarCategory = nameof(Resources.View))]
sealed class CollapseAllCommand : SimpleCommand sealed class CollapseAllCommand : SimpleCommand
{ {
public override void Execute(object parameter) public override void Execute(object parameter)

16
ILSpy/ContextMenuEntry.cs

@ -20,7 +20,7 @@ using System;
using System.ComponentModel.Composition; using System.ComponentModel.Composition;
using System.Linq; using System.Linq;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Media;
using ICSharpCode.AvalonEdit; using ICSharpCode.AvalonEdit;
using ICSharpCode.ILSpy.TextView; using ICSharpCode.ILSpy.TextView;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
@ -222,11 +222,15 @@ namespace ICSharpCode.ILSpy
menuItem.Header = MainWindow.GetResourceString( entryPair.Metadata.Header); menuItem.Header = MainWindow.GetResourceString( entryPair.Metadata.Header);
menuItem.InputGestureText = entryPair.Metadata.InputGestureText; menuItem.InputGestureText = entryPair.Metadata.InputGestureText;
if (!string.IsNullOrEmpty(entryPair.Metadata.Icon)) { if (!string.IsNullOrEmpty(entryPair.Metadata.Icon)) {
menuItem.Icon = new Image { object image = Images.Load(entryPair.Value, entryPair.Metadata.Icon);
Width = 16, if (!(image is Viewbox)) {
Height = 16, image = new Image {
Source = Images.LoadImage(entry, entryPair.Metadata.Icon) Width = 16,
}; Height = 16,
Source = (ImageSource)image
};
}
menuItem.Icon = image;
} }
if (entryPair.Value.IsEnabled(context)) { if (entryPair.Value.IsEnabled(context)) {
menuItem.Click += delegate { entry.Execute(context); }; menuItem.Click += delegate { entry.Execute(context); };

4
ILSpy/Controls/SearchBoxStyle.xaml

@ -43,7 +43,7 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
ToolTip="Search" ToolTip="Search"
Source="pack://application:,,,/ILSpy;component/images/search.png" /> Source="{local:XamlResource Images/Search}" />
</Border> </Border>
</Grid> </Grid>
</Border> </Border>
@ -57,7 +57,7 @@
</MultiTrigger.Conditions> </MultiTrigger.Conditions>
<Setter Property="Source" <Setter Property="Source"
TargetName="SearchIcon" TargetName="SearchIcon"
Value="pack://application:,,,/ILSpy;component/images/clearsearch.png" /> Value="{local:XamlResource Images/Close}" />
<Setter Property="ToolTip" TargetName="SearchIcon" Value="Clear"/> <Setter Property="ToolTip" TargetName="SearchIcon" Value="Clear"/>
</MultiTrigger> </MultiTrigger>
</ControlTemplate.Triggers> </ControlTemplate.Triggers>

38
ILSpy/Controls/XamlResourceExtension.cs

@ -0,0 +1,38 @@
// Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Windows.Markup;
namespace ICSharpCode.ILSpy.Controls
{
class XamlResourceExtension : MarkupExtension
{
readonly string name;
public XamlResourceExtension(string name)
{
this.name = name ?? throw new ArgumentNullException(nameof(name));
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Images.Load(null, name);
}
}
}

43
ILSpy/FilterSettings.cs

@ -94,29 +94,36 @@ namespace ICSharpCode.ILSpy
} }
} }
public bool ShowInternalApi { public bool ApiVisPublicOnly {
get { return ShowApiLevel == ApiVisibility.PublicAndInternal; } get { return showApiLevel == ApiVisibility.PublicOnly; }
set { set {
if (ShowApiLevel == ApiVisibility.PublicAndInternal) { if (value == (showApiLevel == ApiVisibility.PublicOnly)) return;
ShowApiLevel = ApiVisibility.PublicOnly; ShowApiLevel = ApiVisibility.PublicOnly;
} else { OnPropertyChanged(nameof(ApiVisPublicOnly));
ShowApiLevel = ApiVisibility.PublicAndInternal; OnPropertyChanged(nameof(ApiVisPublicAndInternal));
} OnPropertyChanged(nameof(ApiVisAll));
OnPropertyChanged(nameof(ShowInternalApi));
OnPropertyChanged(nameof(ShowAllApi));
} }
} }
public bool ShowAllApi { public bool ApiVisPublicAndInternal {
get { return ShowApiLevel == ApiVisibility.All; } get { return showApiLevel == ApiVisibility.PublicAndInternal; }
set { set {
if (ShowApiLevel == ApiVisibility.All) { if (value == (showApiLevel == ApiVisibility.PublicAndInternal)) return;
ShowApiLevel = ApiVisibility.PublicOnly; ShowApiLevel = ApiVisibility.PublicAndInternal;
} else { OnPropertyChanged(nameof(ApiVisPublicOnly));
ShowApiLevel = ApiVisibility.All; OnPropertyChanged(nameof(ApiVisPublicAndInternal));
} OnPropertyChanged(nameof(ApiVisAll));
OnPropertyChanged(nameof(ShowInternalApi)); }
OnPropertyChanged(nameof(ShowAllApi)); }
public bool ApiVisAll {
get { return showApiLevel == ApiVisibility.All; }
set {
if (value == (showApiLevel == ApiVisibility.All)) return;
ShowApiLevel = ApiVisibility.All;
OnPropertyChanged(nameof(ApiVisPublicOnly));
OnPropertyChanged(nameof(ApiVisPublicAndInternal));
OnPropertyChanged(nameof(ApiVisAll));
} }
} }

368
ILSpy/ILSpy.csproj

@ -2,7 +2,7 @@
<Project Sdk="MSBuild.Sdk.Extras"> <Project Sdk="MSBuild.Sdk.Extras">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net462</TargetFramework> <TargetFramework>net472</TargetFramework>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<LangVersion>7.2</LangVersion> <LangVersion>7.2</LangVersion>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo> <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
@ -49,8 +49,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AvalonEdit" Version="6.0.0-preview1" /> <PackageReference Include="AvalonEdit" Version="6.0.0-rc1" />
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
<PackageReference Include="Microsoft.VisualStudio.Composition" Version="15.5.23" /> <PackageReference Include="Microsoft.VisualStudio.Composition" Version="15.5.23" />
<PackageReference Include="Mono.Cecil" Version="0.10.3" /> <PackageReference Include="Mono.Cecil" Version="0.10.3" />
<PackageReference Include="OSVersionHelper" Version="1.0.11" /> <PackageReference Include="OSVersionHelper" Version="1.0.11" />
@ -61,6 +60,10 @@
<ProjectReference Include="..\SharpTreeView\ICSharpCode.TreeView.csproj" /> <ProjectReference Include="..\SharpTreeView\ICSharpCode.TreeView.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ApplicationDefinition Include="App.xaml" /> <ApplicationDefinition Include="App.xaml" />
</ItemGroup> </ItemGroup>
@ -126,6 +129,7 @@
<Compile Include="Controls\ExtensionMethods.cs" /> <Compile Include="Controls\ExtensionMethods.cs" />
<Compile Include="Controls\SearchBox.cs" /> <Compile Include="Controls\SearchBox.cs" />
<Compile Include="Controls\SortableGridViewColumn.cs" /> <Compile Include="Controls\SortableGridViewColumn.cs" />
<Compile Include="Controls\XamlResourceExtension.cs" />
<Compile Include="CreateListDialog.xaml.cs"> <Compile Include="CreateListDialog.xaml.cs">
<DependentUpon>CreateListDialog.xaml</DependentUpon> <DependentUpon>CreateListDialog.xaml</DependentUpon>
</Compile> </Compile>
@ -254,24 +258,10 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.zh-Hans.resx" /> <EmbeddedResource Include="Properties\Resources.zh-Hans.resx" />
<Resource Include="Images\AssemblyList.png" />
<Resource Include="Images\AssemblyListGAC.png" />
<Resource Include="Images\AssemblyWarning.png" />
<Resource Include="Images\ViewCode.png" />
<Resource Include="Images\SaveFile.png" />
<Resource Include="Images\OK.png" />
<Resource Include="Images\ClearSearch.png" />
<Resource Include="Images\Search.png" />
<Resource Include="Images\Delete.png" />
<Resource Include="Images\ILSpy.ico" /> <Resource Include="Images\ILSpy.ico" />
<Resource Include="Images\FindAssembly.png" />
<EmbeddedResource Include="TextView\CSharp-Mode.xshd" /> <EmbeddedResource Include="TextView\CSharp-Mode.xshd" />
<Resource Include="Images\Breakpoint.png" />
<Resource Include="Images\CurrentLine.png" />
<Resource Include="Images\DisabledBreakpoint.png" />
<None Include="app.config" /> <None Include="app.config" />
<None Include="app.manifest" /> <None Include="app.manifest" />
<None Include="Images\ResourceXsl.png" />
<None Include="Properties\app.config.template" /> <None Include="Properties\app.config.template" />
<None Include="Properties\AssemblyInfo.template.cs" /> <None Include="Properties\AssemblyInfo.template.cs" />
<None Include="Properties\launchSettings.json" /> <None Include="Properties\launchSettings.json" />
@ -314,6 +304,68 @@
<Page Include="Controls\SearchBoxStyle.xaml" /> <Page Include="Controls\SearchBoxStyle.xaml" />
<Page Include="CreateListDialog.xaml" /> <Page Include="CreateListDialog.xaml" />
<Page Include="DebugSteps.xaml" /> <Page Include="DebugSteps.xaml" />
<Page Include="Images\Assembly.xaml" />
<Page Include="Images\AssemblyList.xaml" />
<Page Include="Images\AssemblyListGAC.xaml" />
<Page Include="Images\AssemblyWarning.xaml" />
<Page Include="Images\Back.xaml" />
<Page Include="Images\Class.xaml" />
<Page Include="Images\Close.xaml" />
<Page Include="Images\CollapseAll.xaml" />
<Page Include="Images\Constructor.xaml" />
<Page Include="Images\Copy.xaml" />
<Page Include="Images\Delegate.xaml" />
<Page Include="Images\Delete.xaml" />
<Page Include="Images\Enum.xaml" />
<Page Include="Images\EnumValue.xaml" />
<Page Include="Images\Event.xaml" />
<Page Include="Images\ExtensionMethod.xaml" />
<Page Include="Images\Field.xaml" />
<Page Include="Images\FieldReadOnly.xaml" />
<Page Include="Images\FindAssembly.xaml" />
<Page Include="Images\Folder.Closed.xaml" />
<Page Include="Images\Folder.Open.xaml" />
<Page Include="Images\Forward.xaml" />
<Page Include="Images\Indexer.xaml" />
<Page Include="Images\Interface.xaml" />
<Page Include="Images\Library.xaml" />
<Page Include="Images\Literal.xaml" />
<Page Include="Images\Method.xaml" />
<Page Include="Images\Namespace.xaml" />
<Page Include="Images\OK.xaml" />
<Page Include="Images\Open.xaml" />
<Page Include="Images\Operator.xaml" />
<Page Include="Images\OverlayCompilerControlled.xaml" />
<Page Include="Images\OverlayInternal.xaml" />
<Page Include="Images\OverlayPrivate.xaml" />
<Page Include="Images\OverlayPrivateProtected.xaml" />
<Page Include="Images\OverlayProtected.xaml" />
<Page Include="Images\OverlayProtectedInternal.xaml" />
<Page Include="Images\OverlayStatic.xaml" />
<Page Include="Images\PInvokeMethod.xaml" />
<Page Include="Images\Property.xaml" />
<Page Include="Images\ReferenceFolder.xaml" />
<Page Include="Images\Refresh.xaml" />
<Page Include="Images\Resource.xaml" />
<Page Include="Images\ResourceImage.xaml" />
<Page Include="Images\ResourceResourcesFile.xaml" />
<Page Include="Images\ResourceXml.xaml" />
<Page Include="Images\ResourceXsd.xaml" />
<Page Include="Images\ResourceXsl.xaml" />
<Page Include="Images\ResourceXslt.xaml" />
<Page Include="Images\Save.xaml" />
<Page Include="Images\Search.xaml" />
<Page Include="Images\SearchMsdn.xaml" />
<Page Include="Images\ShowAll.xaml" />
<Page Include="Images\ShowPrivateInternal.xaml" />
<Page Include="Images\ShowPublicOnly.xaml" />
<Page Include="Images\Sort.xaml" />
<Page Include="Images\Struct.xaml" />
<Page Include="Images\SubTypes.xaml" />
<Page Include="Images\SuperTypes.xaml" />
<Page Include="Images\ViewCode.xaml" />
<Page Include="Images\VirtualMethod.xaml" />
<Page Include="Images\Warning.xaml" />
<Page Include="MainWindow.xaml" /> <Page Include="MainWindow.xaml" />
<Page Include="OpenFromGacDialog.xaml" /> <Page Include="OpenFromGacDialog.xaml" />
<Page Include="OpenListDialog.xaml" /> <Page Include="OpenListDialog.xaml" />
@ -327,70 +379,228 @@
<Page Include="themes\generic.xaml" /> <Page Include="themes\generic.xaml" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Resource Include="Images\Class.png" />
<Resource Include="Images\StaticClass.png" />
<Resource Include="Images\Delegate.png" />
<Resource Include="Images\Enum.png" />
<Resource Include="Images\Field.png" />
<Resource Include="Images\Interface.png" />
<Resource Include="Images\Literal.png" />
<Resource Include="Images\Method.png" />
<Resource Include="Images\NameSpace.png" />
<Resource Include="Images\Open.png" />
<Resource Include="Images\Assembly.png" />
<Resource Include="Images\Struct.png" />
<Resource Include="Images\ReferenceFolder.Closed.png" />
<Resource Include="Images\ReferenceFolder.Open.png" />
<Resource Include="Images\Event.png" />
<Resource Include="Images\ExtensionMethod.png" />
<Resource Include="Images\Indexer.png" />
<Resource Include="Images\Operator.png" />
<Resource Include="Images\Property.png" />
<Resource Include="Images\Find.png" />
<Resource Include="Images\Library.png" />
<Resource Include="Images\SubTypes.png" />
<Resource Include="Images\SuperTypes.png" />
<Resource Include="Images\Resource.png" />
<Resource Include="Images\Folder.Closed.png" />
<Resource Include="Images\Folder.Open.png" />
<Resource Include="Images\ResourceImage.png" />
<Resource Include="Images\ResourceResourcesFile.png" />
<Resource Include="Images\Back.png" />
<Resource Include="Images\Forward.png" />
<Resource Include="Images\PrivateInternal.png" />
<Resource Include="Images\Refresh.png" />
<Resource Include="Images\Constructor.png" />
<Resource Include="Images\CollapseAll.png" />
<Resource Include="Images\EnumValue.png" />
<Resource Include="Images\FieldReadOnly.png" />
<Resource Include="Images\OverlayInternal.png" />
<Resource Include="Images\OverlayPrivate.png" />
<Resource Include="Images\OverlayPrivateProtected.png" />
<Resource Include="Images\OverlayProtected.png" />
<Resource Include="Images\OverlayProtectedInternal.png" />
<Resource Include="Images\OverlayCompilerControlled.png" />
<Resource Include="Images\OverlayStatic.png" />
<Resource Include="Images\VirtualMethod.png" />
<Resource Include="Images\PInvokeMethod.png" />
<Resource Include="Images\Warning.png" />
<Resource Include="Images\ShowAll.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\ResourceXml.png" />
<Resource Include="Images\ResourceXsd.png" />
<Resource Include="Images\ResourceXslt.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Images\Sort.png" />
<Resource Include="Images\SearchMsdn.png" />
<Resource Include="Images\Copy.png" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Page Update="@(Page)" SubType="Designer" Generator="MSBuild:Compile" /> <Page Update="@(Page)" SubType="Designer" Generator="MSBuild:Compile" />
<Page Update="Images\Assembly.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\AssemblyWarning.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\AssemblyList.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\AssemblyListGAC.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Back.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Class.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Close.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\CollapseAll.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Constructor.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Copy.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Delegate.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Delete.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Enum.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\EnumValue.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Event.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ExtensionMethod.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Field.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\FieldReadOnly.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\FindAssembly.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Folder.Closed.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Folder.Open.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Forward.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Indexer.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Interface.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Library.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Literal.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Method.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OK.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Open.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Operator.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayCompilerControlled.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayInternal.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayPrivate.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayPrivateProtected.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayProtected.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayProtectedInternal.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\OverlayStatic.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\PInvokeMethod.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Property.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ReferenceFolder.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Refresh.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Resource.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ResourceImage.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ResourceResourcesFile.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ResourceXml.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ResourceXsd.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ResourceXsl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ResourceXslt.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Save.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Search.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\SearchMsdn.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ShowAll.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ShowPrivateInternal.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ShowPublicOnly.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Sort.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Struct.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\SubTypes.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\SuperTypes.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\ViewCode.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\VirtualMethod.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Images\Warning.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Options\DecompilerSettingsPanel.xaml"> <Page Update="Options\DecompilerSettingsPanel.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>

BIN
ILSpy/Images/Assembly.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 B

1
ILSpy/Images/Assembly.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><style>.st0{opacity:0}.st0,.st1{fill:#f6f6f6}.st2{fill:#424242}</style><g id="outline"><path class="st0" d="M0 0h16v16H0z"/><path class="st1" d="M16 3v9H8V9H6v2H0V4h6v2h2V3h8z"/></g><g id="icon_x5F_bg"><path class="st2" d="M1 5h4v5H1zM9 4h6v7H9zM6 7h2v1H6z"/></g></svg>

After

Width:  |  Height:  |  Size: 329 B

11
ILSpy/Images/Assembly.xaml

@ -0,0 +1,11 @@
<!-- This file was generated by the AiToXaml tool.-->
<!-- Tool Version: 14.0.22307.0 -->
<DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M8.0001,3.0004L8.0001,6.0004 6.0001,6.0004 6.0001,4.0004 9.99999999997669E-05,4.0004 9.99999999997669E-05,10.9994 6.0001,10.9994 6.0001,8.9994 8.0001,8.9994 8.0001,12.0004 16.0001,12.0004 16.0001,3.0004z" />
<GeometryDrawing Brush="#FF414141" Geometry="F1M1,10L5,10 5,5 1,5z" />
<GeometryDrawing Brush="#FF414141" Geometry="F1M9,11L15,11 15,4 9,4z" />
<GeometryDrawing Brush="#FF414141" Geometry="F1M6,8L8,8 8,7 6,7z" />
</DrawingGroup.Children>
</DrawingGroup>

BIN
ILSpy/Images/AssemblyList.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

1
ILSpy/Images/AssemblyList.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#F6F6F6;} .icon-vs-out{fill:#F6F6F6;} .icon-vs-bg{fill:#424242;} .icon-vs-action-green{fill:#388A34;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M16 6v9h-8v-3h-2v2h-6v-7h2.019v-1h-2.019v-3.982h2.019v-2.018h3.981v2.018h2v3.982h-2v3h2v-3h8z" id="outline"/><path class="icon-vs-bg" d="M15 14h-6v-7h6v7zm-10-6h-4v5h4v-5zm3 2h-2v1h2v-1z" id="iconBg"/><path class="icon-vs-action-green" d="M7 3.018h-2v-2.018h-1.981v2.018h-2.019v1.982h2.019v2h1.981v-2h2v-1.982z" id="colorAction"/></svg>

After

Width:  |  Height:  |  Size: 677 B

10
ILSpy/Images/AssemblyList.xaml

@ -0,0 +1,10 @@
<!-- This file was generated by the AiToXaml tool.-->
<!-- Tool Version: 14.0.22307.0 -->
<DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M2.0187,-0.000199999999999534L2.0187,2.0188 -0.000300000000000189,2.0188 -0.000300000000000189,5.9998 2.0187,5.9998 2.0187,6.9998 -0.000300000000000189,6.9998 -0.000300000000000189,13.9998 6.0007,13.9998 6.0007,12.0008 7.9997,12.0008 7.9997,14.9998 15.9997,14.9998 15.9997,5.9998 7.9997,5.9998 7.9997,8.9998 6.0007,8.9998 6.0007,5.9998 7.9997,5.9998 7.9997,2.0188 6.0007,2.0188 6.0007,-0.000199999999999534z" />
<GeometryDrawing Brush="#FF424242" Geometry="F1M8,10L6,10 6,11 8,11z M5,8L1,8 1,13 5,13z M15,14L9,14 9,7 15,7z" />
<GeometryDrawing Brush="#FF388A34" Geometry="F1M7,3.0181L5,3.0181 5,1.0001 3.019,1.0001 3.019,3.0181 1,3.0181 1,5.0001 3.019,5.0001 3.019,7.0001 5,7.0001 5,5.0001 7,5.0001z" />
</DrawingGroup.Children>
</DrawingGroup>

BIN
ILSpy/Images/AssemblyListGAC.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

84
ILSpy/Images/AssemblyListGAC.svg

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="100%"
height="100%"
viewBox="0 0 16 16"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
id="svg34"
sodipodi:docname="AssemblyListGAC.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata40"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs38" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1377"
id="namedview36"
showgrid="false"
inkscape:zoom="59"
inkscape:cx="7.3041001"
inkscape:cy="6.2184606"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg34" /><rect
style="fill:#f6f6f6;fill-opacity:0;fill-rule:nonzero"
height="16"
width="16"
y="0"
x="0"
id="canvas" /><path
inkscape:connector-curvature="0"
style="fill:#f6f6f6;fill-rule:nonzero"
d="m 16,6 v 9 H 8 V 12 H 6 v 2 H 0 V 7 H 2.019 V 6 H 0 V 2.018 H 2.019 V 0 H 6 V 2.018 H 8 V 6 H 6 V 9 H 8 V 6 Z"
id="outline" /><path
inkscape:connector-curvature="0"
style="fill:#424242;fill-rule:nonzero"
d="M 15,14 H 9 V 7 h 6 z M 5,8 H 1 v 5 h 4 z m 3,2 H 6 v 1 h 2 z"
id="iconBg" /><path
inkscape:connector-curvature="0"
style="fill:#388a34;fill-rule:nonzero"
d="M 7,3.018 H 5 V 1 H 3.019 V 3.018 H 1 V 5 H 3.019 V 7 H 5 V 5 h 2 z"
id="colorAction" /><path
style="opacity:1;fill:#f6f6f6;fill-opacity:1;fill-rule:nonzero;stroke:#f6f6f6;stroke-width:0.92304718;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="m 12.115051,12.119209 h 2.731841 v 2.250121 h -2.731841 z"
id="rect855" /><path
style="clip-rule:evenodd;opacity:1;fill:#f6f6f6;fill-opacity:1;fill-rule:nonzero;stroke:#f6f6f6;stroke-width:1.21481812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="M 3.2681589,12 H 8 v 2.250121 H 3.2681589 Z"
id="rect855-8" /><path
inkscape:connector-curvature="0"
id="path6"
style="fill:#090909;fill-opacity:1;fill-rule:nonzero;stroke:#f6f6f6;stroke-width:1.42003238;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="m 4.6532176,13.643132 v -0.497783 h 1.7955738 v 1.570386 c -0.2725954,0.225188 -0.5570427,0.38519 -0.853342,0.497783 -0.2903733,0.112594 -0.5925986,0.165928 -0.9007499,0.165928 -0.414819,0 -0.7940821,-0.08889 -1.1377893,-0.266669 C 3.219129,14.934997 2.9583856,14.674254 2.7865321,14.336472 2.6146785,13.998691 2.5257887,13.625354 2.5257887,13.210535 c 0,-0.414819 0.08889,-0.800008 0.2607434,-1.161493 0.1718535,-0.355559 0.420745,-0.622229 0.7466742,-0.794082 0.3200032,-0.171854 0.6933403,-0.260744 1.1200113,-0.260744 0.3022253,0 0.5807466,0.04741 0.829638,0.14815 0.2488915,0.100742 0.444449,0.237039 0.5807467,0.414819 0.1422236,0.17778 0.2488914,0.408893 0.3259292,0.69334 L 5.8798967,12.392749 C 5.8147109,12.173488 5.737673,12.00756 5.6428573,11.883114 5.5480415,11.758668 5.4117438,11.657927 5.2398902,11.586815 5.0621106,11.509777 4.8665531,11.474221 4.6532176,11.474221 c -0.2548174,0 -0.4800048,0.04148 -0.6637104,0.11852 -0.1896316,0.07704 -0.3377812,0.177779 -0.4563009,0.308151 -0.1125938,0.124446 -0.2014835,0.26667 -0.2666694,0.420745 -0.1066677,0.260744 -0.1600016,0.545191 -0.1600016,0.853342 0,0.373337 0.065186,0.69334 0.1955575,0.948158 0.1303717,0.254817 0.3200033,0.444449 0.5688947,0.568895 0.2488914,0.118519 0.5096348,0.183705 0.7940821,0.183705 0.2429654,0 0.4800049,-0.04741 0.7111183,-0.142224 0.2311135,-0.09482 0.402967,-0.195557 0.5274127,-0.296299 v -0.794082 z" /><path
inkscape:connector-curvature="0"
id="path10"
style="fill:#090909;fill-opacity:1;fill-rule:nonzero;stroke:#f6f6f6;stroke-width:1.42003238;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="m 6.8152247,15.308334 1.6237201,-4.243006 h 0.6044506 l 1.7363136,4.243006 h -0.63408 L 9.647846,14.022395 H 7.8759762 l -0.4681529,1.285939 z m 1.2207531,-1.74224 H 9.4759924 L 9.0315434,12.392749 C 8.8952458,12.03719 8.794504,11.740891 8.7293181,11.509777 c -0.053334,0.272595 -0.1303716,0.545191 -0.2251874,0.81186 z" /><path
inkscape:connector-curvature="0"
id="path14"
style="fill:#090909;fill-opacity:1;fill-rule:nonzero;stroke:#f6f6f6;stroke-width:1.42003238;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="m 14.258214,13.820912 0.562968,0.142223 c -0.118519,0.462227 -0.331855,0.81186 -0.640006,1.054826 -0.302225,0.242965 -0.675563,0.361485 -1.120012,0.361485 -0.4563,0 -0.829638,-0.08889 -1.114085,-0.278521 -0.284447,-0.183706 -0.503709,-0.456301 -0.651858,-0.805935 -0.154076,-0.355559 -0.225188,-0.734822 -0.225188,-1.137789 0,-0.444449 0.08296,-0.829638 0.254818,-1.155567 0.165927,-0.331855 0.408893,-0.580747 0.717044,-0.7526 0.314077,-0.171854 0.657784,-0.254818 1.031121,-0.254818 0.420745,0 0.782231,0.106668 1.066678,0.32593 0.290373,0.213335 0.491857,0.51556 0.60445,0.906675 l -0.551116,0.130372 c -0.09482,-0.308151 -0.242966,-0.533339 -0.426671,-0.669636 -0.189632,-0.142224 -0.420745,-0.213336 -0.705193,-0.213336 -0.325929,0 -0.598524,0.07704 -0.817786,0.23704 -0.219261,0.154075 -0.373337,0.361485 -0.462226,0.628154 -0.08889,0.260743 -0.136298,0.533339 -0.136298,0.81186 0,0.361485 0.05333,0.675563 0.160001,0.948158 0.106668,0.266669 0.26667,0.468153 0.491857,0.598525 0.219262,0.136297 0.462227,0.201483 0.717045,0.201483 0.314077,0 0.580746,-0.08889 0.800008,-0.272595 0.219261,-0.17778 0.367411,-0.450375 0.444449,-0.805934 z" /><path
id="path26"
style="fill:#f6f6f6;fill-opacity:1;fill-rule:nonzero;stroke:#f6f6f6;stroke-width:1.42003238;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="m 14.258214,13.820912 0.562968,0.142223 c -0.118519,0.462227 -0.331855,0.81186 -0.640006,1.054826 -0.302225,0.242965 -0.675563,0.361485 -1.120012,0.361485 -0.4563,0 -0.829638,-0.08889 -1.114085,-0.278521 -0.284447,-0.183706 -0.503709,-0.456301 -0.651858,-0.805935 -0.154076,-0.355559 -0.225188,-0.734822 -0.225188,-1.137789 0,-0.444449 0.08296,-0.829638 0.254818,-1.155567 0.165927,-0.331855 0.408893,-0.580747 0.717044,-0.7526 0.314077,-0.171854 0.657784,-0.254818 1.031121,-0.254818 0.420745,0 0.782231,0.106668 1.066678,0.32593 0.290373,0.213335 0.491857,0.51556 0.60445,0.906675 l -0.551116,0.130372 c -0.09482,-0.308151 -0.242966,-0.533339 -0.426671,-0.669636 -0.189632,-0.142224 -0.420745,-0.213336 -0.705193,-0.213336 -0.325929,0 -0.598524,0.07704 -0.817786,0.23704 -0.219261,0.154075 -0.373337,0.361485 -0.462226,0.628154 -0.08889,0.260743 -0.136298,0.533339 -0.136298,0.81186 0,0.361485 0.05333,0.675563 0.160001,0.948158 0.106668,0.266669 0.26667,0.468153 0.491857,0.598525 0.219262,0.136297 0.462227,0.201483 0.717045,0.201483 0.314077,0 0.580746,-0.08889 0.800008,-0.272595 0.219261,-0.17778 0.367411,-0.450375 0.444449,-0.805934 z m -7.4429893,1.487422 1.6237201,-4.243006 h 0.6044506 l 1.7363136,4.243006 h -0.63408 L 9.647846,14.022395 H 7.8759762 l -0.4681529,1.285939 z m 1.2207531,-1.74224 H 9.4759924 L 9.0315434,12.392749 C 8.8952458,12.03719 8.794504,11.740891 8.7293181,11.509777 c -0.053334,0.272595 -0.1303716,0.545191 -0.2251874,0.81186 z m -3.3827602,0.07704 v -0.497783 h 1.7955738 v 1.570386 c -0.2725954,0.225188 -0.5570427,0.38519 -0.853342,0.497783 -0.2903733,0.112594 -0.5925986,0.165928 -0.9007499,0.165928 -0.414819,0 -0.7940821,-0.08889 -1.1377893,-0.266669 C 3.219129,14.934997 2.9583856,14.674254 2.7865321,14.336472 2.6146785,13.998691 2.5257887,13.625354 2.5257887,13.210535 c 0,-0.414819 0.08889,-0.800008 0.2607434,-1.161493 0.1718535,-0.355559 0.420745,-0.622229 0.7466742,-0.794082 0.3200032,-0.171854 0.6933403,-0.260744 1.1200113,-0.260744 0.3022253,0 0.5807466,0.04741 0.829638,0.14815 0.2488915,0.100742 0.444449,0.237039 0.5807467,0.414819 0.1422236,0.17778 0.2488914,0.408893 0.3259292,0.69334 L 5.8798967,12.392749 C 5.8147109,12.173488 5.737673,12.00756 5.6428573,11.883114 5.5480415,11.758668 5.4117438,11.657927 5.2398902,11.586815 5.0621106,11.509777 4.8665531,11.474221 4.6532176,11.474221 c -0.2548174,0 -0.4800048,0.04148 -0.6637104,0.11852 -0.1896316,0.07704 -0.3377812,0.177779 -0.4563009,0.308151 -0.1125938,0.124446 -0.2014835,0.26667 -0.2666694,0.420745 -0.1066677,0.260744 -0.1600016,0.545191 -0.1600016,0.853342 0,0.373337 0.065186,0.69334 0.1955575,0.948158 0.1303717,0.254817 0.3200033,0.444449 0.5688947,0.568895 0.2488914,0.118519 0.5096348,0.183705 0.7940821,0.183705 0.2429654,0 0.4800049,-0.04741 0.7111183,-0.142224 0.2311135,-0.09482 0.402967,-0.195557 0.5274127,-0.296299 v -0.794082 z" /><path
id="path26-2"
style="clip-rule:evenodd;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42003238;stroke-linejoin:round;stroke-miterlimit:2;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke markers fill"
d="m 14.258214,13.820911 0.562968,0.142223 c -0.118519,0.462227 -0.331855,0.81186 -0.640006,1.054826 -0.302225,0.242965 -0.675563,0.361485 -1.120012,0.361485 -0.4563,0 -0.829638,-0.08889 -1.114085,-0.278521 -0.284447,-0.183706 -0.503709,-0.456301 -0.651858,-0.805935 -0.154076,-0.355559 -0.225188,-0.734822 -0.225188,-1.137789 0,-0.444449 0.08296,-0.829637 0.254818,-1.155566 0.165927,-0.331855 0.408893,-0.580747 0.717044,-0.7526 0.314077,-0.171854 0.657784,-0.254818 1.031121,-0.254818 0.420745,0 0.782231,0.106668 1.066678,0.32593 0.290373,0.213335 0.491857,0.51556 0.60445,0.906675 l -0.551116,0.130372 c -0.09482,-0.308151 -0.242966,-0.533339 -0.426671,-0.669636 -0.189632,-0.142224 -0.420745,-0.213336 -0.705193,-0.213336 -0.325929,0 -0.598524,0.07704 -0.817786,0.23704 -0.219261,0.154075 -0.373337,0.361485 -0.462226,0.628154 -0.08889,0.260742 -0.136298,0.533338 -0.136298,0.811859 0,0.361485 0.05333,0.675563 0.160001,0.948158 0.106668,0.266669 0.26667,0.468153 0.491857,0.598525 0.219262,0.136297 0.462227,0.201483 0.717045,0.201483 0.314077,0 0.580746,-0.08889 0.800008,-0.272595 0.219261,-0.17778 0.367411,-0.450375 0.444449,-0.805934 z m -7.442988,1.487422 1.623719,-4.243005 h 0.604451 l 1.736313,4.243005 h -0.63408 L 9.647846,14.022394 h -1.77187 l -0.468153,1.285939 z m 1.220752,-1.74224 H 9.475993 L 9.031544,12.392749 C 8.895246,12.03719 8.794504,11.740891 8.729319,11.509777 c -0.05333,0.272595 -0.130372,0.545191 -0.225188,0.81186 z m -3.3827591,0.07704 V 13.14535 H 6.448793 v 1.570386 c -0.272596,0.225188 -0.557043,0.38519 -0.853342,0.497783 -0.290374,0.112594 -0.592599,0.165928 -0.9007501,0.165928 -0.414819,0 -0.794082,-0.08889 -1.13779,-0.266669 -0.337781,-0.17778 -0.598524,-0.438523 -0.770378,-0.776305 -0.171853,-0.337781 -0.260743,-0.711118 -0.260743,-1.125937 0,-0.414819 0.08889,-0.800008 0.260743,-1.161492 0.171854,-0.355559 0.420745,-0.62223 0.746674,-0.794083 0.320004,-0.171854 0.693341,-0.260744 1.120012,-0.260744 0.302225,0 0.5807461,0.04741 0.8296381,0.14815 0.248891,0.100742 0.444449,0.237039 0.580746,0.414819 0.142224,0.177781 0.248892,0.408894 0.32593,0.693341 L 5.879898,12.392751 C 5.814708,12.17349 5.737674,12.007562 5.642858,11.883116 5.548038,11.75867 5.411745,11.657929 5.239891,11.586817 5.062112,11.509779 4.8665539,11.474223 4.6532189,11.474223 c -0.254818,0 -0.480005,0.04148 -0.663711,0.11852 -0.189631,0.07704 -0.337781,0.177779 -0.456301,0.308151 -0.112593,0.124446 -0.201483,0.26667 -0.266669,0.420745 -0.106668,0.260743 -0.160002,0.54519 -0.160002,0.853341 0,0.373337 0.06519,0.69334 0.195558,0.948158 0.130372,0.254817 0.320003,0.444449 0.568895,0.568895 0.248891,0.118519 0.509634,0.183705 0.794082,0.183705 0.242965,0 0.4800051,-0.04741 0.7111181,-0.142224 0.231114,-0.09482 0.402967,-0.195557 0.527413,-0.296299 v -0.794084 z"
inkscape:connector-curvature="0" /></svg>

After

Width:  |  Height:  |  Size: 12 KiB

44
ILSpy/Images/AssemblyListGAC.xaml

@ -0,0 +1,44 @@
<DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ClipGeometry="M0,0 V16 H16 V0 H0 Z">
<GeometryDrawing>
<GeometryDrawing.Brush>
<SolidColorBrush Color="#FFF6F6F6" Opacity="0" />
</GeometryDrawing.Brush>
<GeometryDrawing.Geometry>
<RectangleGeometry RadiusX="0" RadiusY="0" Rect="0,0,16,16" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1 M16,16z M0,0z M16,6L16,15 8,15 8,12 6,12 6,14 0,14 0,7 2.019,7 2.019,6 0,6 0,2.018 2.019,2.018 2.019,0 6,0 6,2.018 8,2.018 8,6 6,6 6,9 8,9 8,6z" />
<GeometryDrawing Brush="#FF424242" Geometry="F1 M16,16z M0,0z M15,14L9,14 9,7 15,7z M5,8L1,8 1,13 5,13z M8,10L6,10 6,11 8,11z" />
<GeometryDrawing Brush="#FF388A34" Geometry="F1 M16,16z M0,0z M7,3.018L5,3.018 5,1 3.019,1 3.019,3.018 1,3.018 1,5 3.019,5 3.019,7 5,7 5,5 7,5z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1 M16,16z M0,0z M12.115051,12.119209L14.846892,12.119209 14.846892,14.36933 12.115051,14.36933z">
<GeometryDrawing.Pen>
<Pen Brush="#FFF6F6F6" Thickness="0.92304718" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1 M16,16z M0,0z M3.2681589,12L8,12 8,14.250121 3.2681589,14.250121z">
<GeometryDrawing.Pen>
<Pen Brush="#FFF6F6F6" Thickness="1.21481812" StartLineCap="Round" EndLineCap="Round" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FF090909" Geometry="F1 M16,16z M0,0z M4.6532176,13.643132L4.6532176,13.145349 6.4487914,13.145349 6.4487914,14.715735C6.176196,14.940923 5.8917487,15.100925 5.5954494,15.213518 5.3050761,15.326112 5.0028508,15.379446 4.6946995,15.379446 4.2798805,15.379446 3.9006174,15.290556 3.5569102,15.112777 3.219129,14.934997 2.9583856,14.674254 2.7865321,14.336472 2.6146785,13.998691 2.5257887,13.625354 2.5257887,13.210535 2.5257887,12.795716 2.6146787,12.410527 2.7865321,12.049042 2.9583856,11.693483 3.2072771,11.426813 3.5332063,11.25496 3.8532095,11.083106 4.2265466,10.994216 4.6532176,10.994216 4.9554429,10.994216 5.2339642,11.041626 5.4828556,11.142366 5.7317471,11.243108 5.9273046,11.379405 6.0636023,11.557185 6.2058259,11.734965 6.3124937,11.966078 6.3895315,12.250525L5.8798967,12.392749C5.8147109,12.173488 5.737673,12.00756 5.6428573,11.883114 5.5480415,11.758668 5.4117438,11.657927 5.2398902,11.586815 5.0621106,11.509777 4.8665531,11.474221 4.6532176,11.474221 4.3984002,11.474221 4.1732128,11.515701 3.9895072,11.592741 3.7998756,11.669781 3.651726,11.77052 3.5332063,11.900892 3.4206125,12.025338 3.3317228,12.167562 3.2665369,12.321637 3.1598692,12.582381 3.1065353,12.866828 3.1065353,13.174979 3.1065353,13.548316 3.1717213,13.868319 3.3020928,14.123137 3.4324645,14.377954 3.6220961,14.567586 3.8709875,14.692032 4.1198789,14.810551 4.3806223,14.875737 4.6650696,14.875737 4.908035,14.875737 5.1450745,14.828327 5.3761879,14.733513 5.6073014,14.638693 5.7791549,14.537956 5.9036006,14.437214L5.9036006,13.643132z">
<GeometryDrawing.Pen>
<Pen Brush="#FFF6F6F6" Thickness="1.42003238" StartLineCap="Flat" EndLineCap="Flat" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FF090909" Geometry="F1 M16,16z M0,0z M6.8152247,15.308334L8.4389448,11.065328 9.0433954,11.065328 10.779709,15.308334 10.145629,15.308334 9.647846,14.022395 7.8759762,14.022395 7.4078233,15.308334z M8.0359778,13.566094L9.4759924,13.566094 9.0315434,12.392749C8.8952458,12.03719 8.794504,11.740891 8.7293181,11.509777 8.6759841,11.782372 8.5989465,12.054968 8.5041307,12.321637z">
<GeometryDrawing.Pen>
<Pen Brush="#FFF6F6F6" Thickness="1.42003238" StartLineCap="Flat" EndLineCap="Flat" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FF090909" Geometry="F1 M16,16z M0,0z M14.258214,13.820912L14.821182,13.963135C14.702663,14.425362 14.489327,14.774995 14.181176,15.017961 13.878951,15.260926 13.505613,15.379446 13.061164,15.379446 12.604864,15.379446 12.231526,15.290556 11.947079,15.100925 11.662632,14.917219 11.44337,14.644624 11.295221,14.29499 11.141145,13.939431 11.070033,13.560168 11.070033,13.157201 11.070033,12.712752 11.152993,12.327563 11.324851,12.001634 11.490778,11.669779 11.733744,11.420887 12.041895,11.249034 12.355972,11.07718 12.699679,10.994216 13.073016,10.994216 13.493761,10.994216 13.855247,11.100884 14.139694,11.320146 14.430067,11.533481 14.631551,11.835706 14.744144,12.226821L14.193028,12.357193C14.098208,12.049042 13.950062,11.823854 13.766357,11.687557 13.576725,11.545333 13.345612,11.474221 13.061164,11.474221 12.735235,11.474221 12.46264,11.551261 12.243378,11.711261 12.024117,11.865336 11.870041,12.072746 11.781152,12.339415 11.692262,12.600158 11.644854,12.872754 11.644854,13.151275 11.644854,13.51276 11.698184,13.826838 11.804855,14.099433 11.911523,14.366102 12.071525,14.567586 12.296712,14.697958 12.515974,14.834255 12.758939,14.899441 13.013757,14.899441 13.327834,14.899441 13.594503,14.810551 13.813765,14.626846 14.033026,14.449066 14.181176,14.176471 14.258214,13.820912z">
<GeometryDrawing.Pen>
<Pen Brush="#FFF6F6F6" Thickness="1.42003238" StartLineCap="Flat" EndLineCap="Flat" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1 M16,16z M0,0z M14.258214,13.820912L14.821182,13.963135C14.702663,14.425362 14.489327,14.774995 14.181176,15.017961 13.878951,15.260926 13.505613,15.379446 13.061164,15.379446 12.604864,15.379446 12.231526,15.290556 11.947079,15.100925 11.662632,14.917219 11.44337,14.644624 11.295221,14.29499 11.141145,13.939431 11.070033,13.560168 11.070033,13.157201 11.070033,12.712752 11.152993,12.327563 11.324851,12.001634 11.490778,11.669779 11.733744,11.420887 12.041895,11.249034 12.355972,11.07718 12.699679,10.994216 13.073016,10.994216 13.493761,10.994216 13.855247,11.100884 14.139694,11.320146 14.430067,11.533481 14.631551,11.835706 14.744144,12.226821L14.193028,12.357193C14.098208,12.049042 13.950062,11.823854 13.766357,11.687557 13.576725,11.545333 13.345612,11.474221 13.061164,11.474221 12.735235,11.474221 12.46264,11.551261 12.243378,11.711261 12.024117,11.865336 11.870041,12.072746 11.781152,12.339415 11.692262,12.600158 11.644854,12.872754 11.644854,13.151275 11.644854,13.51276 11.698184,13.826838 11.804855,14.099433 11.911523,14.366102 12.071525,14.567586 12.296712,14.697958 12.515974,14.834255 12.758939,14.899441 13.013757,14.899441 13.327834,14.899441 13.594503,14.810551 13.813765,14.626846 14.033026,14.449066 14.181176,14.176471 14.258214,13.820912z M6.8152247,15.308334L8.4389448,11.065328 9.0433954,11.065328 10.779709,15.308334 10.145629,15.308334 9.647846,14.022395 7.8759762,14.022395 7.4078233,15.308334z M8.0359778,13.566094L9.4759924,13.566094 9.0315434,12.392749C8.8952458,12.03719 8.794504,11.740891 8.7293181,11.509777 8.6759841,11.782372 8.5989465,12.054968 8.5041307,12.321637z M4.6532176,13.643134L4.6532176,13.145351 6.4487914,13.145351 6.4487914,14.715737C6.176196,14.940925 5.8917487,15.100927 5.5954494,15.21352 5.3050761,15.326114 5.0028508,15.379448 4.6946995,15.379448 4.2798805,15.379448 3.9006174,15.290558 3.5569102,15.112779 3.219129,14.934997 2.9583856,14.674254 2.7865321,14.336472 2.6146785,13.998691 2.5257887,13.625354 2.5257887,13.210535 2.5257887,12.795716 2.6146787,12.410527 2.7865321,12.049042 2.9583856,11.693483 3.2072771,11.426813 3.5332063,11.25496 3.8532095,11.083106 4.2265466,10.994216 4.6532176,10.994216 4.9554429,10.994216 5.2339642,11.041626 5.4828556,11.142366 5.7317471,11.243108 5.9273046,11.379405 6.0636023,11.557185 6.2058259,11.734965 6.3124937,11.966078 6.3895315,12.250525L5.8798967,12.392749C5.8147109,12.173488 5.737673,12.00756 5.6428573,11.883114 5.5480415,11.758668 5.4117438,11.657927 5.2398902,11.586815 5.0621106,11.509777 4.8665531,11.474221 4.6532176,11.474221 4.3984002,11.474221 4.1732128,11.515701 3.9895072,11.592741 3.7998756,11.669781 3.651726,11.77052 3.5332063,11.900892 3.4206125,12.025338 3.3317228,12.167562 3.2665369,12.321637 3.1598692,12.582381 3.1065353,12.866828 3.1065353,13.174979 3.1065353,13.548316 3.1717213,13.868319 3.3020928,14.123137 3.4324645,14.377954 3.6220961,14.567586 3.8709875,14.692032 4.1198789,14.810551 4.3806223,14.875737 4.6650696,14.875737 4.908035,14.875737 5.1450745,14.828327 5.3761879,14.733513 5.6073014,14.638693 5.7791549,14.537956 5.9036006,14.437214L5.9036006,13.643132z">
<GeometryDrawing.Pen>
<Pen Brush="#FFF6F6F6" Thickness="1.42003238" StartLineCap="Flat" EndLineCap="Flat" LineJoin="Round" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<GeometryDrawing Brush="#FF0000FF" Geometry="F1 M16,16z M0,0z M14.258214,13.820911L14.821182,13.963134C14.702663,14.425361 14.489327,14.774994 14.181176,15.01796 13.878951,15.260925 13.505613,15.379445 13.061164,15.379445 12.604864,15.379445 12.231526,15.290555 11.947079,15.100924 11.662632,14.917218 11.44337,14.644623 11.295221,14.294989 11.141145,13.93943 11.070033,13.560167 11.070033,13.1572 11.070033,12.712751 11.152993,12.327563 11.324851,12.001634 11.490778,11.669779 11.733744,11.420887 12.041895,11.249034 12.355972,11.07718 12.699679,10.994216 13.073016,10.994216 13.493761,10.994216 13.855247,11.100884 14.139694,11.320146 14.430067,11.533481 14.631551,11.835706 14.744144,12.226821L14.193028,12.357193C14.098208,12.049042 13.950062,11.823854 13.766357,11.687557 13.576725,11.545333 13.345612,11.474221 13.061164,11.474221 12.735235,11.474221 12.46264,11.551261 12.243378,11.711261 12.024117,11.865336 11.870041,12.072746 11.781152,12.339415 11.692262,12.600157 11.644854,12.872753 11.644854,13.151274 11.644854,13.512759 11.698184,13.826837 11.804855,14.099432 11.911523,14.366101 12.071525,14.567585 12.296712,14.697957 12.515974,14.834254 12.758939,14.89944 13.013757,14.89944 13.327834,14.89944 13.594503,14.81055 13.813765,14.626845 14.033026,14.449065 14.181176,14.17647 14.258214,13.820911z M6.815226,15.308333L8.438945,11.065328 9.043396,11.065328 10.779709,15.308333 10.145629,15.308333 9.647846,14.022394 7.875976,14.022394 7.407823,15.308333z M8.035978,13.566093L9.475993,13.566093 9.031544,12.392749C8.895246,12.03719 8.794504,11.740891 8.729319,11.509777 8.675989,11.782372 8.598947,12.054968 8.504131,12.321637z M4.6532189,13.643133L4.6532189,13.14535 6.448793,13.14535 6.448793,14.715736C6.176197,14.940924 5.89175,15.100926 5.595451,15.213519 5.305077,15.326113 5.002852,15.379447 4.6947009,15.379447 4.2798819,15.379447 3.9006189,15.290557 3.5569109,15.112778 3.2191299,14.934998 2.9583869,14.674255 2.7865329,14.336473 2.6146799,13.998692 2.5257899,13.625355 2.5257899,13.210536 2.5257899,12.795717 2.6146799,12.410528 2.7865329,12.049044 2.9583869,11.693485 3.2072779,11.426814 3.5332069,11.254961 3.8532109,11.083107 4.2265479,10.994217 4.6532189,10.994217 4.9554439,10.994217 5.233965,11.041627 5.482857,11.142367 5.731748,11.243109 5.927306,11.379406 6.063603,11.557186 6.205827,11.734967 6.312495,11.96608 6.389533,12.250527L5.879898,12.392751C5.814708,12.17349 5.737674,12.007562 5.642858,11.883116 5.548038,11.75867 5.411745,11.657929 5.239891,11.586817 5.062112,11.509779 4.8665539,11.474223 4.6532189,11.474223 4.3984009,11.474223 4.1732139,11.515703 3.9895079,11.592743 3.7998769,11.669783 3.6517269,11.770522 3.5332069,11.900894 3.4206139,12.02534 3.3317239,12.167564 3.2665379,12.321639 3.1598699,12.582382 3.1065359,12.866829 3.1065359,13.17498 3.1065359,13.548317 3.1717259,13.86832 3.3020939,14.123138 3.4324659,14.377955 3.6220969,14.567587 3.8709889,14.692033 4.1198799,14.810552 4.3806229,14.875738 4.6650709,14.875738 4.9080359,14.875738 5.145076,14.828328 5.376189,14.733514 5.607303,14.638694 5.779156,14.537957 5.903602,14.437215L5.903602,13.643131z" />
</DrawingGroup>

BIN
ILSpy/Images/AssemblyWarning.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 578 B

1
ILSpy/Images/AssemblyWarning.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><style>.st0{opacity:0}.st0,.st1{fill:#f6f6f6}.st2{fill:#424242}.st3{fill:#fc0}</style><g id="outline"><path class="st0" d="M0 0h16v16H0z"/><path class="st1" d="M16 2H8v3H6V3H0v7h6V8h2v3h.5L7 14l1 2h7l1-2-1.5-3H16z"/></g><path class="st2" d="M5 9H1V4h4v5zm3-3H6v1h2V6zm4.5 1l1.5 3h1V3H9v7l1.5-3h2z" id="icon_x5F_bg"/><path class="st3" d="M11.891 8.016h-.781l-3.016 6 .515.984h5.766l.484-1-2.968-5.984zM12 14h-1v-1h1v1zm0-2h-1v-2h1v2z" id="not_x5F_bg"/><path d="M12 12h-1v-2h1v2zm0 1h-1v1h1v-1z" id="not_x5F_fg"/></svg>

After

Width:  |  Height:  |  Size: 577 B

11
ILSpy/Images/AssemblyWarning.xaml

@ -0,0 +1,11 @@
<!-- This file was generated by the AiToXaml tool.-->
<!-- Tool Version: 14.0.22307.0 -->
<DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M8.0001,1.9996L8.0001,5.0006 6.0001,5.0006 6.0001,3.0006 9.99999999997669E-05,3.0006 9.99999999997669E-05,9.9996 6.0001,9.9996 6.0001,7.9996 8.0001,7.9996 8.0001,10.9996 8.4991,10.9996 7.0001,14.0006 8.0001,15.9996 15.0001,15.9996 16.0001,14.0006 14.5001,10.9996 16.0001,10.9996 16.0001,1.9996z" />
<GeometryDrawing Brush="#FF414141" Geometry="F1M12.5,7L14,10 15,10 15,3 9,3 9,10 10.5,7z M8,6L6,6 6,7 8,7z M5,9L1,9 1,4 5,4z" />
<GeometryDrawing Brush="#FFFFCC00" Geometry="F1M12,12L11,12 11,10 12,10z M12,14L11,14 11,13 12,13z M11.891,8.016L11.109,8.016 8.094,14.016 8.609,15 14.375,15 14.859,14z" />
<GeometryDrawing Brush="#FF000000" Geometry="F1M11,12L12,12 12,9.999 11,9.999z M11,14L12,14 12,13 11,13z" />
</DrawingGroup.Children>
</DrawingGroup>

BIN
ILSpy/Images/Back.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 779 B

1
ILSpy/Images/Back.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><style type="text/css">.icon-canvas-transparent{opacity:0;fill:#F6F6F6;} .icon-vs-out{fill:#F6F6F6;} .icon-vs-fg{fill:#F0EFF1;} .icon-vs-action-blue{fill:#00539C;}</style><path class="icon-canvas-transparent" d="M16 16h-16v-16h16v16z" id="canvas"/><path class="icon-vs-out" d="M15 8c0 3.9-3.1 7-7 7s-7-3.1-7-7 3.1-7 7-7 7 3.1 7 7z" id="outline"/><path class="icon-vs-action-blue" d="M2 8c0 3.2 2.8 6 6 6s6-2.8 6-6-2.8-6-6-6-6 2.8-6 6zm2 0l3-3h2l-2 2h5v2h-5l2 2h-2l-3-3z" id="iconBg"/><path class="icon-vs-fg" d="M4 8l3-3h2l-2 2h5v2h-5l2 2h-2l-3-3z" id="iconFg"/></svg>

After

Width:  |  Height:  |  Size: 631 B

10
ILSpy/Images/Back.xaml

@ -0,0 +1,10 @@
<!-- This file was generated by the AiToXaml tool.-->
<!-- Tool Version: 14.0.22307.0 -->
<DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M15,8C15,11.866 11.866,15 8,15 4.134,15 1,11.866 1,8 1,4.134 4.134,1 8,1 11.866,1 15,4.134 15,8" />
<GeometryDrawing Brush="#FF00539C" Geometry="F1M4,8L7,5 9,5 7,7 12,7 12,9 7,9 9,11 7,11z M2,8C2,11.247 4.755,14 8,14 11.245,14 14,11.247 14,8 14,4.756 11.245,2 8,2 4.755,2 2,4.756 2,8" />
<GeometryDrawing Brush="#FFF0EFF1" Geometry="F1M4,8L7,5 9,5 7,7 12,7 12,9 7,9 9,11 7,11z" />
</DrawingGroup.Children>
</DrawingGroup>

BIN
ILSpy/Images/Break.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

BIN
ILSpy/Images/Breakpoint.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 735 B

BIN
ILSpy/Images/Class.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

1
ILSpy/Images/Class.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><style>.icon-canvas-transparent{opacity:0;fill:#f6f6f6}.icon-vs-out{fill:#f6f6f6}.icon-vs-action-orange{fill:#c27d1a}</style><g id="canvas"><path id="XMLID_1_" class="icon-canvas-transparent" d="M16 16H0V0h16v16z"/></g><path class="icon-vs-out" d="M16 6.586l-3-3L11.586 5H9.414l1-1-4-4h-.828L0 5.586v.828l4 4L6.414 8H7v5h1.586l3 3h.828L16 12.414v-.828L13.914 9.5 16 7.414v-.828z" id="outline"/><g id="iconBg"><path class="icon-vs-action-orange" d="M13 10l2 2-3 3-2-2 1-1H8V7H6L4 9 1 6l5-5 3 3-2 2h5l1-1 2 2-3 3-2-2 1-1H9v4l2.999.002L13 10z"/></g></svg>

After

Width:  |  Height:  |  Size: 612 B

9
ILSpy/Images/Class.xaml

@ -0,0 +1,9 @@
<!-- This file was generated by the AiToXaml tool.-->
<!-- Tool Version: 14.0.22307.0 -->
<DrawingGroup xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<DrawingGroup.Children>
<GeometryDrawing Brush="#00FFFFFF" Geometry="F1M16,16L0,16 0,0 16,0z" />
<GeometryDrawing Brush="#FFF6F6F6" Geometry="F1M5.5863,-0.000199999999999534L0.000299999999999301,5.5858 0.000299999999999301,6.4138 3.9993,10.4138 6.4143,7.9998 7.0003,7.9998 7.0003,9.9998 7.0003,13.0008 8.5863,13.0008 11.5853,15.9998 12.4133,15.9998 16.0003,12.4148 16.0003,11.5858 13.9143,9.4998 16.0003,7.4138 16.0003,6.5858 12.9993,3.5868 11.5853,4.9998 10.0003,4.9998 9.4143,4.9998 10.4143,4.0008 6.4143,-0.000199999999999534z" />
<GeometryDrawing Brush="#FFC17C1A" Geometry="F1M13,10L15,12 12,15 10,13 11,12 8,12 8,7 6,7 4,9 1,6 6,1 9,4 7,6 12,6 13,5 15,7 12,10 10,8 11,7 9,7 9,11 11.999,11.002z" />
</DrawingGroup.Children>
</DrawingGroup>

BIN
ILSpy/Images/ClearSearch.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 674 B

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save