icsharpcode / ILSpy

.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
20.92k stars 3.31k forks source link

((DefaultInterpolatedStringHandler)(ref val)) #3067

Open TheKolyian4ik opened 11 months ago

TheKolyian4ik commented 11 months ago

I was trying to decompile tModLoader., change the code and compile. When I open the decompiled code in Visual Studio 2022 it gave me ~1500 errors. CS1525 Invalid expression term "ref" and a few CS1073

Here in tModLoader\UwUPnP\Gateway.cs every (ref val) gives an error

private static string BuildArgString((string Key, object Value) arg)
    {
        DefaultInterpolatedStringHandler val = default(DefaultInterpolatedStringHandler);
        ((DefaultInterpolatedStringHandler)(ref val))._002Ector(5, 3);
        ((DefaultInterpolatedStringHandler)(ref val)).AppendLiteral("<");
        ((DefaultInterpolatedStringHandler)(ref val)).AppendFormatted(arg.Key);
        ((DefaultInterpolatedStringHandler)(ref val)).AppendLiteral(">");
        ((DefaultInterpolatedStringHandler)(ref val)).AppendFormatted<object>(arg.Value);
        ((DefaultInterpolatedStringHandler)(ref val)).AppendLiteral("</");
        ((DefaultInterpolatedStringHandler)(ref val)).AppendFormatted(arg.Key);
        ((DefaultInterpolatedStringHandler)(ref val)).AppendLiteral(">");
        return ((DefaultInterpolatedStringHandler)(ref val)).ToStringAndClear();
    }

How do I fix this?

dgrunwald commented 11 months ago

This problem occurs when ILSpy could not load the assembly that defines DefaultInterpolatedStringHandler and gets confused whether it is dealing with a class or struct. Ensure you have the necessary reference assemblies loaded.

TheKolyian4ik commented 11 months ago

Thank you for explaining that. But which assembly defines DefaultInterpolatedStringHandler?

greenozon commented 11 months ago

@dgrunwald that type is a standard .NET type but it was added in .NET6

https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.defaultinterpolatedstringhandler?view=net-6.0

so the question to @TheKolyian4ik - do you have .NET6 (or higher) installed?

TheKolyian4ik commented 11 months ago

@greenozon yes, I do have .NET6 installed. But it still gives me

((DefaultInterpolatedStringHandler)(ref val))

also there is

 .ctor(5, 3);

or

_002Ector(5, 3);

which also gives errors.

sgkoishi commented 8 months ago

Try running dotnet --list-runtimes. Also, you can obtain the source from their repository to compile, without decompiling.