Runtime: [5.0.100-preview.6.20308.7] OpenMu button disabled

Created on 9 Jun 2020  路  13Comments  路  Source: dotnet/runtime

Application Name: Open Mu
OS: Windows 10 RS5
CPU: X64
.NET Build Number: 5.0.100-preview.6.20308.7
App Location: On repro machine, at C:\Users\appcompat\Documents\OpenMU

App Source : On repro machine, at C:\Users\appcompat\Documents\OpenMUSource

App Source on GitHub link: https://github.com/MUnique/OpenMU

Verify Scenarios:
1). Windows 10 RS5 X64 + .NET Core SDK build 5.0.100-preview.6.20308.7: Fail
2). Windows 10 RS5 X64 + .NET Core SDK build 5.0.100-preview.5.20279.10: Pass
3). Windows 10 RS5 X64 + .NET Core SDK build 3.1.300 Pass

Repo Machine Environment Info :
.NET SDK (reflecting any global.json):
Version: 5.0.100-preview.6.20306.2
Commit: ca518bb33e

Runtime Environment:
OS Name: Windows
OS Version: 10.0.18363
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\5.0.100-preview.6.20306.2\

Host (useful for support):
Version: 5.0.0-preview.6.20305.6
Commit: 4ba9ecaabd

.NET SDKs installed:
3.1.300 [C:\Program Files\dotnet\sdk]
5.0.100-preview.6.20306.2 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
Microsoft.AspNetCore.All 2.1.18 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.18 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.0-preview.6.20305.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.18 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.0-preview.6.20305.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.0-preview.6.20305.4 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Repro steps:
On the repo machine (10.159.67.185)

1) On CMD, navigate to C:\Users\appcompat\Documents\OpenMU
2) Run : dotnet MUnique.OpenMU.Startup.dll
3) Wait for admin panel to initialize
4)In Browser, Open http://localhost:1234/admin

Since "C:\Users\appcompat\Documents\OpenMU\MUnique.OpenMU.Startup.runtimeconfig.json" set to .net5 , app will use .NET5 runtime. This is issue is not repro on .NET Core 3

Expected Result:
Should be able to click StartButton, when we move cursor on top of button, click is disabled
Players should have number ex: 1/1000 instead of /1000
Total Players should be 0 instead of NaN

See Attachment : ExpectedOpenMu.png

Actual Result:
See Attachment : ActualOpenMu.png

Findings :
We think this is related to serialization, we serialize same object with .net core 3 and 5 with, it gets different results, see attachment for full json.
string jsonString = JsonSerializer.Serialize(currentConnectServerInfos);

.net core 3 :

{

      "settings":{
         "Id":"1aebf70c-7ffa-4090-a912-fddee43cd7be",
         "client":{
            "Id":"cbcb50a0-8e2a-4c05-81b7-5ed1c74c0f8d",
            "Season":6,
            "Episode":3,
            "Language":1,
            "Version":"MTA0MDQ=",
            "Serial":"azFQazJqY0VUNDhteEwzYg==",
            "Description":"Season 6 Episode 3 GMO Client"
         },
         "ServerId":0,
         "Description":"Connect Server (Season 6 Episode 3 English)",
         "DisconnectOnUnknownPacket":true,
         "MaximumReceiveSize":6,
         "ClientListenerPort":44405,
         "Timeout":{
            "Ticks":600000000,
            "Days":0,
            "Hours":0,
            "Milliseconds":0,
            "Minutes":1,
            "Seconds":0,
            "TotalDays":0.0006944444444444445,
            "TotalHours":0.016666666666666666,
            "TotalMilliseconds":60000,
            "TotalMinutes":1,
            "TotalSeconds":60
         },
         "CurrentPatchVersion":"AQMr",
         "PatchAddress":"patch.muonline.webzen.com",
         "MaxConnectionsPerAddress":30,
         "CheckMaxConnectionsPerAddress":true,
         "MaxConnections":10000,
         "ListenerBacklog":100,
         "MaxFtpRequests":1,
         "MaxIpRequests":5,
         "MaxServerListRequests":20
      },
      "Id":65536,
      "Description":"Connect Server (Season 6 Episode 3 English)",
      "State":0,
      "OnlinePlayerCount":0,
      "MaximumPlayers":10000,
      "Type":2
   }

.NET 5 Prev 6 :

{

      "settings":{
         "Id":"1aebf70c-7ffa-4090-a912-fddee43cd7be",
         "client":{
            "Id":"cbcb50a0-8e2a-4c05-81b7-5ed1c74c0f8d",
            "Season":6,
            "Episode":3,
            "Language":1,
            "Version":"MTA0MDQ=",
            "Serial":"azFQazJqY0VUNDhteEwzYg==",
            "Description":"Season 6 Episode 3 GMO Client"
         },
         "Client":{
            "Season":6,
            "Episode":3,
            "Language":1,
            "Version":"MTA0MDQ=",
            "Serial":"azFQazJqY0VUNDhteEwzYg==",
            "Description":"Season 6 Episode 3 GMO Client"
         },
         "ServerId":0,
         "Description":"Connect Server (Season 6 Episode 3 English)",
         "DisconnectOnUnknownPacket":true,
         "MaximumReceiveSize":6,
         "ClientListenerPort":44405,
         "Timeout":{
            "Ticks":600000000,
            "Days":0,
            "Hours":0,
            "Milliseconds":0,
            "Minutes":1,
            "Seconds":0,
            "TotalDays":0.0006944444444444445,
            "TotalHours":0.016666666666666666,
            "TotalMilliseconds":60000,
            "TotalMinutes":1,
            "TotalSeconds":60
         },
         "CurrentPatchVersion":"AQMr",
         "PatchAddress":"patch.muonline.webzen.com",
         "MaxConnectionsPerAddress":30,
         "CheckMaxConnectionsPerAddress":true,
         "MaxConnections":10000,
         "ListenerBacklog":100,
         "MaxFtpRequests":1,
         "MaxIpRequests":5,
         "MaxServerListRequests":20
      },
      "Id":65536,
      "Description":"Connect Server (Season 6 Episode 3 English)",
      "State":0,
      "OnlinePlayerCount":0,
      "MaximumPlayers":10000,
      "Type":2
   }

Repro machine could be found at: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1138494

cc @dotnet-actwx-bot

area-System.Text.Json

Most helpful comment

@DotNetAppCompatFeiWang looks like your diagnosis was correct, thanks for helping narrow this down to the correct component, that saves a huge amount of time.

All 13 comments

I couldn't figure out the best area label to add to this issue. Please help me learn by adding exactly one area label.

@DotNetAppCompatFeiWang thanks, note you can add triple back ticks (`) on their own line to get pretty formatting, I did that above. https://github.github.com/gfm/#fenced-code-blocks

I don't have context here but the diff between the two blocks above is the addition of this

         "Client":{
            "Season":6,
            "Episode":3,
            "Language":1,
            "Version":"MTA0MDQ=",
            "Serial":"azFQazJqY0VUNDhteEwzYg==",
            "Description":"Season 6 Episode 3 GMO Client"
         },

@steveharter the suggestion here is that the JsonSerializer is emitting more JSON in Preview 6 than in Preview 5 and that it's causing a problem. Any thoughts about why that might be, since the app did not change?

1). Windows 10 RS5 X64 + .NET Core SDK build 5.0.100-preview.6.20308.7: Fail
2). Windows 10 RS5 X64 + .NET Core SDK build 5.0.100-preview.5.20279.10: Pass
3). Windows 10 RS5 X64 + .NET Core SDK build 3.1.300 Pass

BTW ther'es a bit more info in the internal link above.

This is related to https://github.com/dotnet/runtime/pull/36936.


JsonSerializer is emitting more JSON

The change at the heart of this issue is https://github.com/dotnet/runtime/pull/32107 which added code to enable edge-case scenarios like the following (i.e to serialize a public property that was hidden by a non-public property):

var obj = new ClassWithNewSlotPrivateProperty();
string json = JsonSerializer.Serialize(obj);
public class ClassWithPublicProperty
{
    public string MyString { get; set; } = "DefaultValue";
}

public class ClassWithNewSlotPrivateProperty : ClassWithPublicProperty
{
    private new string MyString { get; set; } = "NewDefaultValue";
}

Expected: {"MyString":"DefaultValue"} (5.0 output)
Actual: {} (3.x output)

Following the fix in https://github.com/dotnet/runtime/pull/37720, it is only in the above edge-case scenario that the serializer will emit more output.

@DotNetAppCompatFeiWang looks like your diagnosis was correct, thanks for helping narrow this down to the correct component, that saves a huge amount of time.

@layomia can you please help to confirm the fix is merged to Preview7 branch? This issue still repro with the latest Preview7 build dotnet-sdk-5.0.100-preview.7.20351.2.

@layomia Just want to check again with you, can you please help to confirm the fix is merged to Preview7 branch? This issue still repro with the latest Preview7 build dotnet-sdk-5.0.100-preview.7.20351.2.

The PR that was linked appears to be:

$ git rev-list upstream/release/5.0-preview7 | grep "^644f32d"
644f32d2a21420b020d773d5bb1c45532b26200b

@layomia can you help with the question about the fix not working.

@DotNetAppCompatFeiWang @danmosemsft - sorry for the delay. I'm investigating why the issue is not fixed with this change https://github.com/dotnet/runtime/pull/37720. I have the repro machine set up and will be in touch offline about getting the full suite of app compat tests that run the serializer.

My target for a fix, if any, would be the preview 8 snap on Jul 15. Depending on my investigation, we may have to document a breaking change for this and related edge case scenarios, and modify the tests accordingly.

Verify this issue fixed in build dotnet-sdk-5.0.100-preview.8.20373.19-win-x64

Was this page helpful?
0 / 5 - 0 ratings