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

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

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
<PackAsTool>true</PackAsTool>
<AssemblyName>ilspycmd</AssemblyName>
<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>
<Copyright>Copyright 2011-2019 AlphaSierraPapa</Copyright>
<PackageProjectUrl>https://github.com/icsharpcode/ILSpy/</PackageProjectUrl>
@ -28,7 +28,7 @@ @@ -28,7 +28,7 @@
<ItemGroup>
<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.Runtime.Handles" Version="4.3.0" />

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

@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
<ItemGroup>
<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>
</Project>

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

@ -183,20 +183,21 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -183,20 +183,21 @@ namespace ICSharpCode.Decompiler.Tests.Helpers
}
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 Lazy<IEnumerable<MetadataReference>> defaultReferences = new Lazy<IEnumerable<MetadataReference>>(delegate {
return new[]
{
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Facades\\netstandard.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.Core.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, @"Facades\System.Runtime.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "System.Xml.dll")),
MetadataReference.CreateFromFile(Path.Combine(refAsmPath, "Microsoft.CSharp.dll")),
MetadataReference.CreateFromFile(typeof(ValueTuple).Assembly.Location),
MetadataReference.CreateFromFile(typeof(ValueTask).Assembly.Location),
MetadataReference.CreateFromFile(typeof(Span<>).Assembly.Location),
};
});

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

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

6
ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs

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

10
ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs

@ -284,7 +284,9 @@ namespace ICSharpCode.Decompiler.Tests @@ -284,7 +284,9 @@ namespace ICSharpCode.Decompiler.Tests
[Test]
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]
@ -299,6 +301,12 @@ namespace ICSharpCode.Decompiler.Tests @@ -299,6 +301,12 @@ namespace ICSharpCode.Decompiler.Tests
Run(cscOptions: cscOptions);
}
[Test]
public void CustomTaskType([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{
RunForLibrary(cscOptions: cscOptions);
}
[Test]
public void NullableRefTypes([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions)
{

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

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

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

@ -0,0 +1,15 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ -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
{
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 @@ -1192,5 +1192,22 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
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 @@ -276,5 +276,15 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
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 @@ -273,5 +273,10 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
Get<S>().Field.ToString();
}
public static string CallOnIntegerConstant()
{
return ulong.MaxValue.ToString();
}
}
}

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

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

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

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

2
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

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

2
ICSharpCode.Decompiler/CSharp/CallBuilder.cs

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

14
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -188,6 +188,11 @@ namespace ICSharpCode.Decompiler.CSharp @@ -188,6 +188,11 @@ namespace ICSharpCode.Decompiler.CSharp
}
internal bool HidesVariableWithName(string name)
{
return HidesVariableWithName(currentFunction, name);
}
internal static bool HidesVariableWithName(ILFunction currentFunction, string name)
{
return currentFunction.Ancestors.OfType<ILFunction>().Any(HidesVariableOrNestedFunction);
@ -2769,14 +2774,9 @@ namespace ICSharpCode.Decompiler.CSharp @@ -2769,14 +2774,9 @@ namespace ICSharpCode.Decompiler.CSharp
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
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)
.WithILInstruction(inst)
.WithRR(new ByReferenceResolveResult(value.ResolveResult, ReferenceKind.Ref));

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

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

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

@ -58,18 +58,20 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -58,18 +58,20 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
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)
return;
InvocationExpression invocation = stmt.Expression as InvocationExpression;
if (invocation == null)
if (!(stmt.Expression is InvocationExpression invocation))
return;
MemberReferenceExpression mre = invocation.Target as MemberReferenceExpression;
if (mre != null && mre.MemberName == ".ctor") {
if (invocation.Target is MemberReferenceExpression mre && mre.MemberName == ".ctor") {
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;
else if (mre.Target is BaseReferenceExpression)
else if (target is BaseReferenceExpression)
ci.ConstructorInitializerType = ConstructorInitializerType.Base;
else
return;

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

@ -180,16 +180,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms @@ -180,16 +180,23 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
if (!IsValidInStatementExpression(stmt.Expression)) {
// fetch ILFunction
var function = stmt.Ancestors.SelectMany(a => a.Annotations.OfType<ILFunction>()).First(f => f.Parent == null);
// assign result to dummy variable
var type = stmt.Expression.GetResolveResult().Type;
var v = function.RegisterVariable(
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());
// if possible use C# 7.0 discard-assignment
if (context.Settings.Discards && !ExpressionBuilder.HidesVariableWithName(function, "_")) {
stmt.Expression = new AssignmentExpression(
new IdentifierExpression("_"), // no ResolveResult
stmt.Expression.Detach());
} else {
// assign result to dummy variable
var type = stmt.Expression.GetResolveResult().Type;
var v = function.RegisterVariable(
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 @@ -223,8 +223,14 @@ namespace ICSharpCode.Decompiler.CSharp
}
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.
} 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>();
if (convAnnotation != null) {
@ -416,6 +422,13 @@ namespace ICSharpCode.Decompiler.CSharp @@ -416,6 +422,13 @@ namespace ICSharpCode.Decompiler.CSharp
if (rr.IsCompileTimeConstant && !rr.IsError) {
return expressionBuilder.ConvertConstantValue(rr, allowImplicitConversion)
.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 (allowImplicitConversion) {

4
ICSharpCode.Decompiler/CSharp/WholeProjectDecompiler.cs

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

20
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -537,6 +537,26 @@ namespace ICSharpCode.Decompiler @@ -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;
/// <summary>

6
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -33,7 +33,6 @@ @@ -33,7 +33,6 @@
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<EmbedAllSources>true</EmbedAllSources>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>$(DefineConstants);STEP</DefineConstants>
</PropertyGroup>
@ -41,7 +40,6 @@ @@ -41,7 +40,6 @@
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<EmbedAllSources>true</EmbedAllSources>
</PropertyGroup>
<PropertyGroup>
@ -54,6 +52,10 @@ @@ -54,6 +52,10 @@
<PackageReference Include="System.Collections.Immutable" Version="1.5.0" />
<PackageReference Include="System.Reflection.Metadata" Version="1.6.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>

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

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

2
ICSharpCode.Decompiler/IL/ILReader.cs

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

17
ICSharpCode.Decompiler/IL/Instructions.cs

@ -2529,9 +2529,10 @@ namespace ICSharpCode.Decompiler.IL @@ -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>
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.type = type;
}
public static readonly SlotInfo ValueSlot = new SlotInfo("Value", canInlineInto: true);
ILInstruction value;
@ -2581,6 +2582,12 @@ namespace ICSharpCode.Decompiler.IL @@ -2581,6 +2582,12 @@ namespace ICSharpCode.Decompiler.IL
return clone;
}
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()
{
return value.Flags;
@ -2594,6 +2601,8 @@ namespace ICSharpCode.Decompiler.IL @@ -2594,6 +2601,8 @@ namespace ICSharpCode.Decompiler.IL
{
WriteILRange(output, options);
output.Write(OpCode);
output.Write(' ');
type.WriteTo(output);
output.Write('(');
this.value.WriteTo(output, options);
output.Write(')');
@ -2613,7 +2622,7 @@ namespace ICSharpCode.Decompiler.IL @@ -2613,7 +2622,7 @@ namespace ICSharpCode.Decompiler.IL
protected internal override bool PerformMatch(ILInstruction other, ref Patterns.Match match)
{
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 @@ -7805,14 +7814,16 @@ namespace ICSharpCode.Decompiler.IL
value = default(ILInstruction);
return false;
}
public bool MatchAddressOf(out ILInstruction value)
public bool MatchAddressOf(out ILInstruction value, out IType type)
{
var inst = this as AddressOf;
if (inst != null) {
value = inst.Value;
type = inst.Type;
return true;
}
value = default(ILInstruction);
type = default(IType);
return false;
}
public bool MatchThreeValuedBoolAnd(out ILInstruction left, out ILInstruction right)

2
ICSharpCode.Decompiler/IL/Instructions.tt

@ -179,7 +179,7 @@ @@ -179,7 +179,7 @@
CustomClassName("StLoc"), HasVariableOperand("Store", generateCheckInvariant: false), CustomArguments(("value", null)),
ResultType("variable.StackType")),
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.",
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.",

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

@ -214,13 +214,11 @@ namespace ICSharpCode.Decompiler.IL @@ -214,13 +214,11 @@ namespace ICSharpCode.Decompiler.IL
Debug.Assert(Method != null);
break;
case ILFunctionKind.Delegate:
Debug.Assert(Parent != null && !(Parent is Block));
Debug.Assert(DelegateType != null);
Debug.Assert(DeclarationScope == null);
Debug.Assert(!(DelegateType?.FullName == "System.Linq.Expressions.Expression" && DelegateType.TypeParameterCount == 1));
break;
case ILFunctionKind.ExpressionTree:
Debug.Assert(Parent != null && !(Parent is Block));
Debug.Assert(DelegateType != null);
Debug.Assert(DeclarationScope == null);
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 @@ -418,7 +418,7 @@ namespace ICSharpCode.Decompiler.IL
{
if (this is LdObj ldobj && ldobj.Target is LdFlda ldflda && ldobj.UnalignedPrefix == 0 && !ldobj.IsVolatile) {
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;
}
return true;

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

@ -493,7 +493,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -493,7 +493,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
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);
return reservedVariableNames;
}

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

@ -95,7 +95,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -95,7 +95,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
temp = ldfldaTarget;
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);
var replacement = new LdLoca(v).WithILRange(addressOfTarget);
foreach (var r in range) {

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

@ -226,7 +226,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -226,7 +226,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (loadInst.OpCode == OpCode.LdLoca) {
// it was an ldloca instruction, so we need to use the pseudo-opcode 'addressof'
// 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 {
loadInst.ReplaceWith(inlinedExpression);
}

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

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

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

@ -203,7 +203,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -203,7 +203,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false; // setter/adder/remover cannot be called with ?. syntax
}
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;
}
// 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 @@ -30,13 +30,12 @@ namespace ICSharpCode.Decompiler.IL.Transforms
MethodDefinition methodDef = metadata.GetMethodDefinition((MethodDefinitionHandle)inst.Method.MetadataToken);
if (!methodDef.HasBody())
return;
var genericContext = DelegateConstruction.GenericContextFromTypeArguments(inst.Method.Substitution);
if (genericContext == null)
return;
// Use the callee's generic context
var genericContext = new GenericContext(inst.Method);
// partially copied from CSharpDecompiler
var ilReader = context.CreateILReader();
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);
proxyFunction.RunTransforms(CSharp.CSharpDecompiler.EarlyILTransforms(), transformContext);
if (!(proxyFunction.Body is BlockContainer blockContainer))
@ -81,8 +80,14 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -81,8 +80,14 @@ namespace ICSharpCode.Decompiler.IL.Transforms
}
}
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);
inst.ReplaceWith(newInst);
}

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

@ -203,6 +203,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -203,6 +203,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
switchValue = new LdLoc(switchValueVar);
}
} else {
// Instruction before the start of the switch is not related to the switch.
keepAssignmentBefore = true;
switchValue = new LdLoc(switchValueVar);
}
// 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 @@ -541,7 +541,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (target.ResultType == StackType.Ref)
return target;
else
return new AddressOf(target);
return new AddressOf(target, expectedType);
case StackType.O:
if (targetType.IsReferenceType == false) {
return new Box(target, targetType);
@ -721,7 +721,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -721,7 +721,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (member.DeclaringType.IsReferenceType == true) {
inst = new LdFlda(target, (IField)member);
} 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) {

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

@ -224,7 +224,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -224,7 +224,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
return false;
var firstArg = callVirt.Arguments.FirstOrDefault();
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 NullableLiftingTransform.MatchGetValueOrDefault(innerArg2, objVar)
|| (innerArg2 is NullableUnwrap unwrap

4
ICSharpCode.Decompiler/Metadata/OperandType.cs

@ -94,7 +94,9 @@ namespace ICSharpCode.Decompiler.Metadata @@ -94,7 +94,9 @@ namespace ICSharpCode.Decompiler.Metadata
"vararg", "variant", "vector", "virtual", "void", "wchar", "winapi", "with", "wrapper",
// 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; @@ -26,7 +26,7 @@ using System.Text;
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
{
static UniversalAssemblyResolver()

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

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

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

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

62
ICSharpCode.Decompiler/TypeSystem/TaskType.cs

@ -54,7 +54,67 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -54,7 +54,67 @@ namespace ICSharpCode.Decompiler.TypeSystem
}
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>
/// Creates a task type.
/// </summary>

2
ILSpy.AddIn/Commands/OpenReferenceCommand.cs

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

6
ILSpy.AddIn/ILSpy.AddIn.csproj

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

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

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

4
ILSpy.BamlDecompiler/ILSpy.BamlDecompiler.csproj

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

16
ILSpy.Package/ILSpy.Package.wapproj

@ -20,22 +20,6 @@ @@ -20,22 +20,6 @@
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</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">
<Configuration>Debug</Configuration>
<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 @@ @@ -15,7 +15,7 @@
<Properties>
<DisplayName>ILSpy (CI)</DisplayName>
<PublisherDisplayName>ICSharpCode</PublisherDisplayName>
<PublisherDisplayName>CN=ICSharpCode Team</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>

2
ILSpy.Package/Package-Local.appxmanifest

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

6
ILSpy.Package/Package.appxmanifest

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

2
ILSpy.Tests/ILSpy.Tests.csproj

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

96
ILSpy.WithPackage.sln

@ -44,213 +44,129 @@ EndProject @@ -44,213 +44,129 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = 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
{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|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.Build.0 = 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}.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|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.Build.0 = Release|Any CPU
{B51C6636-B8D1-4200-9869-08F2689DE6C2}.Release|x86.ActiveCfg = Release|Any CPU
@ -258,12 +174,6 @@ Global @@ -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.Build.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.Build.0 = Debug|x64
{BAB51A23-9C15-42CC-8465-EB732BF9A932}.Debug|x64.Deploy.0 = Debug|x64
@ -273,12 +183,6 @@ Global @@ -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.Build.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.Build.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; @@ -25,7 +25,7 @@ using ICSharpCode.ILSpy.TreeNodes;
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
{
public bool IsVisible(TextViewContext context)

13
ILSpy/Analyzers/Builtin/EventImplementsInterfaceAnalyzer.cs

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

12
ILSpy/Analyzers/Builtin/EventOverriddenByAnalyzer.cs

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

13
ILSpy/Analyzers/Builtin/MethodImplementsInterfaceAnalyzer.cs

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

13
ILSpy/Analyzers/Builtin/MethodOverriddenByAnalyzer.cs

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

13
ILSpy/Analyzers/Builtin/PropertyImplementsInterfaceAnalyzer.cs

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

12
ILSpy/Analyzers/Builtin/PropertyOverriddenByAnalyzer.cs

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

2
ILSpy/Commands/BrowseBackCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties; @@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
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
{
public BrowseBackCommand()

2
ILSpy/Commands/BrowseForwardCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties; @@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
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
{
public BrowseForwardCommand()

4
ILSpy/Commands/OpenCommand.cs

@ -21,8 +21,8 @@ using ICSharpCode.ILSpy.Properties; @@ -21,8 +21,8 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy
{
[ExportToolbarCommand(ToolTip = nameof(Resources.Open), ToolbarIcon = "Images/Open.png", 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)]
[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", MenuCategory = nameof(Resources.Open), MenuOrder = 0)]
sealed class OpenCommand : CommandWrapper
{
public OpenCommand()

2
ILSpy/Commands/OpenFromGacCommand.cs

@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
using ICSharpCode.ILSpy.Properties;
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
{
public override void Execute(object parameter)

2
ILSpy/Commands/OpenListCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties; @@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
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
{
public override void Execute(object parameter)

4
ILSpy/Commands/RefreshCommand.cs

@ -21,8 +21,8 @@ using ICSharpCode.ILSpy.Properties; @@ -21,8 +21,8 @@ using ICSharpCode.ILSpy.Properties;
namespace ICSharpCode.ILSpy
{
[ExportToolbarCommand(ToolTip = nameof(Resources.RefreshCommand_ReloadAssemblies), ToolbarIcon = "Images/Refresh.png", 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)]
[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", MenuCategory = nameof(Resources.Open), MenuOrder = 2)]
sealed class RefreshCommand : CommandWrapper
{
public RefreshCommand()

2
ILSpy/Commands/SaveCodeContextMenuEntry.cs

@ -29,7 +29,7 @@ using Microsoft.Win32; @@ -29,7 +29,7 @@ using Microsoft.Win32;
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
{
public void Execute(TextViewContext context)

2
ILSpy/Commands/SaveCommand.cs

@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties; @@ -21,7 +21,7 @@ using ICSharpCode.ILSpy.Properties;
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
{
public SaveCommand()

8
ILSpy/Commands/SortAssemblyListCommand.cs

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

16
ILSpy/ContextMenuEntry.cs

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

4
ILSpy/Controls/SearchBoxStyle.xaml

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

38
ILSpy/Controls/XamlResourceExtension.cs

@ -0,0 +1,38 @@ @@ -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 @@ -94,29 +94,36 @@ namespace ICSharpCode.ILSpy
}
}
public bool ShowInternalApi {
get { return ShowApiLevel == ApiVisibility.PublicAndInternal; }
public bool ApiVisPublicOnly {
get { return showApiLevel == ApiVisibility.PublicOnly; }
set {
if (ShowApiLevel == ApiVisibility.PublicAndInternal) {
ShowApiLevel = ApiVisibility.PublicOnly;
} else {
ShowApiLevel = ApiVisibility.PublicAndInternal;
}
OnPropertyChanged(nameof(ShowInternalApi));
OnPropertyChanged(nameof(ShowAllApi));
if (value == (showApiLevel == ApiVisibility.PublicOnly)) return;
ShowApiLevel = ApiVisibility.PublicOnly;
OnPropertyChanged(nameof(ApiVisPublicOnly));
OnPropertyChanged(nameof(ApiVisPublicAndInternal));
OnPropertyChanged(nameof(ApiVisAll));
}
}
public bool ShowAllApi {
get { return ShowApiLevel == ApiVisibility.All; }
public bool ApiVisPublicAndInternal {
get { return showApiLevel == ApiVisibility.PublicAndInternal; }
set {
if (ShowApiLevel == ApiVisibility.All) {
ShowApiLevel = ApiVisibility.PublicOnly;
} else {
ShowApiLevel = ApiVisibility.All;
}
OnPropertyChanged(nameof(ShowInternalApi));
OnPropertyChanged(nameof(ShowAllApi));
if (value == (showApiLevel == ApiVisibility.PublicAndInternal)) return;
ShowApiLevel = ApiVisibility.PublicAndInternal;
OnPropertyChanged(nameof(ApiVisPublicOnly));
OnPropertyChanged(nameof(ApiVisPublicAndInternal));
OnPropertyChanged(nameof(ApiVisAll));
}
}
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 @@ @@ -2,7 +2,7 @@
<Project Sdk="MSBuild.Sdk.Extras">
<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<TargetFramework>net472</TargetFramework>
<OutputType>WinExe</OutputType>
<LangVersion>7.2</LangVersion>
<GenerateAssemblyInfo>False</GenerateAssemblyInfo>
@ -49,8 +49,7 @@ @@ -49,8 +49,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AvalonEdit" Version="6.0.0-preview1" />
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
<PackageReference Include="AvalonEdit" Version="6.0.0-rc1" />
<PackageReference Include="Microsoft.VisualStudio.Composition" Version="15.5.23" />
<PackageReference Include="Mono.Cecil" Version="0.10.3" />
<PackageReference Include="OSVersionHelper" Version="1.0.11" />
@ -61,6 +60,10 @@ @@ -61,6 +60,10 @@
<ProjectReference Include="..\SharpTreeView\ICSharpCode.TreeView.csproj" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<PackageReference Include="Microsoft.DiaSymReader.Converter.Xml" Version="1.1.0-beta1-63314-01" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml" />
</ItemGroup>
@ -126,6 +129,7 @@ @@ -126,6 +129,7 @@
<Compile Include="Controls\ExtensionMethods.cs" />
<Compile Include="Controls\SearchBox.cs" />
<Compile Include="Controls\SortableGridViewColumn.cs" />
<Compile Include="Controls\XamlResourceExtension.cs" />
<Compile Include="CreateListDialog.xaml.cs">
<DependentUpon>CreateListDialog.xaml</DependentUpon>
</Compile>
@ -254,24 +258,10 @@ @@ -254,24 +258,10 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<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\FindAssembly.png" />
<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.manifest" />
<None Include="Images\ResourceXsl.png" />
<None Include="Properties\app.config.template" />
<None Include="Properties\AssemblyInfo.template.cs" />
<None Include="Properties\launchSettings.json" />
@ -314,6 +304,68 @@ @@ -314,6 +304,68 @@
<Page Include="Controls\SearchBoxStyle.xaml" />
<Page Include="CreateListDialog.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="OpenFromGacDialog.xaml" />
<Page Include="OpenListDialog.xaml" />
@ -327,70 +379,228 @@ @@ -327,70 +379,228 @@
<Page Include="themes\generic.xaml" />
</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>
<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">
<Generator>MSBuild:Compile</Generator>
</Page>

BIN
ILSpy/Images/Assembly.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 B

1
ILSpy/Images/Assembly.svg

@ -0,0 +1 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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