Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Temporarily fix VB App Framework Logging. #7590

Merged
merged 14 commits into from
Aug 15, 2022

Conversation

KlausLoeffelmann
Copy link
Member

@KlausLoeffelmann KlausLoeffelmann commented Aug 14, 2022

The runtime PR dotnet/runtime#73087 broke the Visual Basic Application Framework Logging.

https://source.dot.net/#Microsoft.VisualBasic.Forms/Microsoft/VisualBasic/Logging/Log.vb,170

image

The original assumption that this would work was, that when GetSupportedAttributes gets called in a class derived from TraceSource that then would tell that the trace source was configured from a config file. This is not only what DefaultTraceSource does, it seems to be the only reason for it existence. Now, as far as I understand it, after the change, GetSupportAttributes gets called unconditionally, so HasBeenConfigured in the VB AppFramework's DefaultTraceSource returns always true, and so a FileLogTraceListener gets never added, since the Log class assumes, the trace source was configured by a config file. And that's why there will never be a value other than nothing for the DefaultFileLogWriter property.

After discussing this with the WinForms Team and the VB PM, we're fixing this temporary in the runtime, by returning false unconditionally for Logging.Log.HasBeenConfigured. This assumes, that the trace source has NOT been configured by a config file. Configuring by a config file remains a broken scenario for VB My.Logging, until we will be getting a fix from the Runtime.

Microsoft Reviewers: Open in CodeFlow

@ghost ghost added the draft draft PR label Aug 15, 2022
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get => GetCachedSwitchValue(ScaleTopLevelFormMinMaxSizeForDpiSwitchName, ref s_scaleTopLevelFormMinMaxSizeForDpi);
}
private const string AssumeVbLogClassWasConfiguredByConfigFileName = "System.Windows.Forms.AssumeVbLogClassWasConfiguredByConfigFile";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CS applications don't need this switch, why not put it into the VB assembly?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wouldn't say this is language related?
It's not that the Application Framework can only be used by VB. So, for example, take a look at this:

https://stackoverflow.com/questions/59268557/where-is-the-winforms-application-framework-in-c-sharp-that-exists-in-vb-net

Also, I often saw even C# WPF apps using a few features from the VB App Framework to ease their life. It's a valid approach!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Application that benefits from this quirk, references AppFramework, right? Why doesn't this quirk belong to Applicationframework then?

@@ -163,20 +164,10 @@ Namespace Microsoft.VisualBasic.Logging
If _listenerAttributes Is Nothing Then
_listenerAttributes = Attributes
End If
Return _hasBeenInitializedFromConfigFile
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would had returned false here for the RC and would have worked on the proper fix, i.e. how to get if this was initialized from the config file.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought about this first. But then I thought, there is a good chance it will stay like this, and then we could have it right away.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is a good chance it will stay like this,

Maybe runtime can add a protected property for us to look up?

@RussKie
Copy link
Member

RussKie commented Aug 15, 2022

I don't quite understand the use cases, developer and user experiences. It would be great if you could provide more details explaining those. E.g., this is how a .NET Framework app worked, now ported to .NET 7 it'd work like this. Would a developer or use need to opt-in or opt-out?
Thank you

@KlausLoeffelmann
Copy link
Member Author

I pretty much explained the breaking change in the runtime which led to this.
I added a few lines of explanation in the introduction, what we did.
This needs to go in quick, to unblock us.

@Tanya-Solyanik
Copy link
Member

I would prefer returning a false unconditionally because:
1 quirks are public APIs and it will be difficult to remove them when we have the fix
2. if an application enables logging in the config file, it has also to define a quirk in json file, this is inconvenient
3. we had not exhausted possibilities of a correct fix,

@KlausLoeffelmann KlausLoeffelmann changed the title Fix VB App Framework Logging. Temporarily fix VB App Framework Logging. Aug 15, 2022
@KlausLoeffelmann KlausLoeffelmann marked this pull request as ready for review August 15, 2022 20:17
@KlausLoeffelmann KlausLoeffelmann requested a review from a team as a code owner August 15, 2022 20:17
@dreddy-work
Copy link
Member

dreddy-work commented Aug 15, 2022

Squash merge please. Or enable auto-merge (that is squash default)

@KlausLoeffelmann KlausLoeffelmann enabled auto-merge (squash) August 15, 2022 20:32
@KlausLoeffelmann KlausLoeffelmann merged commit 205f434 into dotnet:main Aug 15, 2022
@ghost ghost added this to the 7.0 RC1 milestone Aug 15, 2022
@ghost ghost removed the draft draft PR label Aug 16, 2022
@@ -163,20 +163,12 @@ Namespace Microsoft.VisualBasic.Logging
If _listenerAttributes Is Nothing Then
_listenerAttributes = Attributes
End If
Return _hasBeenInitializedFromConfigFile

' TODO: This is a tempory fix, which will break configuring logging via file for the time being. See: https://github.com/dotnet/winforms/pull/7590
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you open a follow up bug to get this fixed?

@RussKie
Copy link
Member

RussKie commented Aug 16, 2022

@KlausLoeffelmann is this a breaking change that we need to document?

@merriemcgaw
Copy link
Member

@RussKie yeah, probably. It would be a minute number of customers impacted but it's good to document it of course.

@Tanya-Solyanik
Copy link
Member

app config was not enabled in the previous versions, so this is a regression from .NET framework but not from the previous release of Core

@ghost ghost locked as resolved and limited conversation to collaborators Sep 17, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants