awaescher / fusion Goto Github PK
View Code? Open in Web Editor NEW๐งฐ A modern alternative to the Microsoft Assembly Binding Log Viewer (FUSLOGVW.exe)
License: MIT License
๐งฐ A modern alternative to the Microsoft Assembly Binding Log Viewer (FUSLOGVW.exe)
License: MIT License
The same issue with the original FUSLOGVW.exe.
While Fusion++ was attempting to parse the logs recorded for an IIS-hosted web-app, it threw this uncaught exception and did not proceed any further:
System.ArgumentOutOfRangeException: The added or subtracted value results in an un-representable DateTime. (Parameter 'value')
at System.DateTime.AddTicks(Int64 value)
at System.DateTime.Add(Double value, Int32 scale)
at System.DateTime.AddMilliseconds(Double value)
at DevExpress.XtraEditors.DateTimeChartRangeControlClient.NativeValue(Double value)
at DevExpress.XtraEditors.ChartRangeControlClientBase.GetArgumentRange()
at DevExpress.XtraEditors.ChartRangeControlClientRange.UpdateWithDataArgumentRange()
at DevExpress.XtraEditors.ChartRangeControlClientBase.InteractionUpdated()
at DevExpress.XtraEditors.ChartRangeControlClientBase.CoreClientDelegate.DevExpress.ChartRangeControlClient.Core.IChartCoreClientDelegate.InteractionUpdated()
at DevExpress.ChartRangeControlClient.Core.ChartCoreClient.DataProviderDataChanged(IClientDataProvider provider)
at DevExpress.XtraEditors.ChartRangeControlClientDataProvider.InternalClientDataProvider.RaiseDataChanged()
at DevExpress.XtraEditors.ChartRangeControlClientDataProvider.BindingDelegateBindingChanged()
at DevExpress.XtraEditors.ChartRangeControlClientDataProvider.InternalBindingSourceDelegate.DevExpress.ChartRangeControlClient.Core.IBindingSourceDelegate.BindingChanged()
at DevExpress.ChartRangeControlClient.Core.BindingSource.RaiseBindingChanged()
at DevExpress.ChartRangeControlClient.Core.BindingSource.set_ItemsSource(Object value)
at DevExpress.XtraEditors.ChartRangeControlClientDataProvider.ApplyRealDataSettings()
at DevExpress.XtraEditors.ChartRangeControlClientDataProvider.UpdateBindingSource(Boolean invalidateRangeControl)
at FusionPlusPlus.Forms.MainForm.LoadLogsAsync(ILogStore logStore)
at FusionPlusPlus.Forms.MainForm.LoadLogsAsync(String path)
at FusionPlusPlus.Forms.MainForm.ImportFromDirectoryAsync(String directory)
at FusionPlusPlus.Forms.MainForm.<>c__DisplayClass35_1.<<PopulateLastSessions>b__2>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__139_0(Object state)
The full error message reported by Fusion++ is here: ArgumentOutOfRangeException.txt
And the actual logs in question are here: 2020.04.30.07.37.37.5091.zip
I'm not sure whether this might be related to issue #15. In case it's relevant though, the system-time at which I recorded those logs was 5:37pm in AEST (UTC+10).
For people who want to build with DevExpress, you have a 30 day trial. Also I think after 30 days it displays a warning but still works.
However, you're not allowed to distribute any app with DevExpress components without a license.
This looks like it could be very helpful but I am unable to build it without paying a thousand dollars or more for the DevExpress tools. Is there a workaround?
PS: The code has a dependency on many DevExpress v18.2 asseblies, the current version is 19.x.
Would love to try out this tool, if not for the extreme expense for the requirements.
Bruce.
Running Fusion++ for the first time, I hit this:
Too bad you didn't get any follow-up on #34...
I logged a build action in Visual Studio, and besides MSBuild.exe, this also called PowerShell.exe. Strangely enough, the PowerShell logs have
*** Assembly Binder Log Entry (30.03.2023 @ 10:30:14) ***
while the MSBuild logs have
*** Assembly Binder Log Entry (23-03-30 @ 10:29:42) ***
My Windows 10 settings are Country=Switzerland, RegionalFormat=English (United Kingdom), and ShortDate="yy-MM-dd". It seems like PowerShell is ignoring all but the Country setting, and this is inherited by the Assembly Binder.
To make things even more interesting, my WindowsDisplayLanguage is English (United States), and my Keyboard is set to a customized version of English (United States), but I don't think this is part of the problem.
My CurrentCulture shows en-GB and my CurrentUICulture en-US. I don't know where .NET is hiding the Country=Switzerland setting that PowerShell seems to use.
(The reason for this unusual set-up is that I'm a native Swiss living and working in Switzerland, but I prefer to work with a US English UI and keyboard, except I need UK English for my printers to default to A4 rather than Letter, and I've customized the US keyboard to give me umlauts etc. using special key sequences.)
So, if I knew how to retrieve the Country=Switzerland setting (that's where "dd.MM.yyyy" comes from!), I would recommend to use that as an additional fallback, but there are 8 "CH" CultureInfos. They disagree on the SortDatePattern and it's unclear which one you'd have to take. The only other source of regional information that I find is System.Globalization.RegionInfo.CurrentRegion, but that one shows the UK region for me, which wouldn't work either.
As a last resort, there's the registry: HKCU\Control Panel\International\ has
โ User Profile\Languages: en-US de-CH fr-CH
โ User Profile System Backup\Languages: de-CH en-US
The standard CultureInfo("de-CH") would provide the correct ShortDatePattern as a fallback.
P.S. Other sessions that don't include PowerShell work fine for me โ very nice work, thank you! It was just bad luck that I hit PowerShell on my first attempt to use Fusion++.
I collected a group of fusionlog from AU date format machine.
When tried to open the fusionlog using fusion++ in a US date format machine, it popped out a warning that "Can't parse the fusionlog due to the date format". After I replaced all 25/4/2022 with 4/25/2022, it successfully opened.
Is it possible to improve this part in the future release?
can you provide a Linux version of the app? it will be very useful.
It would be awesome if this tool was able to be installed via winget
.
I can submit a PR to the winget-pkgs to get it listed!
I did this for msbuild structured log viewer as well: microsoft/winget-pkgs#28191
However, winget currently doesn't support portable executables or zip files. So an actual installer would need to be created first.
Once the initial is put in, the winget-pkgs-bot will keep it updated when you do a release on GitHub.
Sound like a good idea?
In order to run the tool, one has to install .NET 5.0, which is deprecated/EOL-ed. It is recommended to move applications forward to .NET 6.0
I've been using Fusion++ today, it's a great tool!
I noticed that it looks like it may not support all entries. Specifically if I run fuslogvw.exe and specify log all binds to disk, I may get files with this format: WhereRefBind!Host=(LocalMachine)!FileName=(Microsoft.Build.NuGetSdkResolver.dll).htm
These don't seem available in Fusion++.
To get a repro:
git clone https://github.com/dotnet/msbuild
(assuming you cloned into C:\MSBuild), checkout main as of 2021-03-24 (e.g. dotnet/msbuild@bf0b0c5)build -bl /p:CreateBootstrap=true
C:\msbuild\artifacts\bin\bootstrap\net472\MSBuild\Current\Bin\MSBuild.exe /r C:\temp\net472\net472.csproj
where net472.csproj is any dotnet C# project. Note /r is important as the codepaths involve NuGetRun step 3 under fuslogvw and Fusion++ and compare the results.
dotnet/msbuild#6289 is the issue we're investigating. Looks like we first load an assembly using Assembly.LoadFrom(), which loads it into the LoadFrom context, then we load the same .dll into the default load context, so we have two copies of the assembly loaded from two different codepaths, then we get the exception.
Hi,
First of all, I love this software. It makes debugging assembly loading issues sooooo much easier.
I was wondering whether it would be possible to reduce the download size by enabling PublishTrimmed in your cake script. I don't have a DevExpress license, or else I would try it out myself.
Also, while we are on the topic of build/publish, .NET 6 is going EOL later this year and it would be good to bump this project to .NET 8. Again, I'd love to contribute and not just pester you, but I don't have the DevExpress license.
Kind regards and thanks again for your wonderful software!
I have a .NET 6 web app that I am running from Visual Studio. I hit record, start the app, when the browser shows the web page I hit stop. The log folder is empty. What am I missing?
C:\Users\clu\AppData\Local\Temp\Fusion++\2020.04.29.07.47.14.7452\Default\Everything.exe
can be convert to
C:\Users\clu\AppData\Local\Temp\Fusion++\2020.04.29.15.47.14.7452+0800\Default\Everything.exe
private const string DATE_FORMAT = "yyyy.MM.dd.HH.mm.ss.ffffzzz";
var folder=DateTime.Now.ToString(DATE_FORMAT).Replace(":", string.Empty);
Path = System.IO.Path.Combine(TopLevelPath, folder);
The following parse datetime will not work. maybe write a custom method to parse the time.
if (DateTime.TryParseExact(result, UTC_DATE_FORMAT, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out DateTime date))
result = date.ToShortDateString() + " " + date.ToLongTimeString();
Hi,
First of all, thank you for this tremendously useful tool! It has been part of my troubleshooting toolchain for quite some time ๐
Since Fusion++ is now published self-contained, I wanted to ask if it would be possible to publish an ARM64 package as well. Windows ARM64 is beginning to take off, and the company I work at is now getting first bug reports from customers on ARM64. It would've been great if Fusion++ was available natively on that platform.
Thank you!
Today I tried to get the log of another application, and I can not get the log detail.
And I checked C:\Users\username\AppData\Local\Temp\Fusion++, and it did not have everyone permission.
I have tried with fusion++ 1.1 and 1.2, both of them did not work. I click record and open an IIS site, and the site reproduce an exception "Could not load file or assembly". Then I click stop, but the software told me "Relax no data yet".
How can I troubleshooting this, I did not find any log under Fusion++.
Windows error:
The version of this file is not compatible with the version of Windows you're running. Check your computer's system information to see whether you need an x86 (32-bit) or x64 (64-bit) version of the program, and then contact the software publisher.
This is where I need the Fusion log viewer: on a VM to test that I have all dependencies included in my build and to help find the missing ones.
Am I missing something or can I really not run the app in this environment?
Since you can only have one session open at a time per Fusion++ instance, it would be helpful to add the session name to the title. It's easy to lose track while switching through several sessions, because there's no visual indicator for the name of the currently open session.
Please add the support for .NET Core Applications.
Would be handy to install and update that way ;-)
There is no debug info so I can't attach anything.
After pressing record, application show "has stopped working blah blah close the program". If I have a lot of assembly bindings going on on the background, it crashes almost instantly.
When I open the recent session, it shows the assembly list for a few seconds then it also crashes.
Crashes with 1.1 and 1.0 but 0.8 works
Hi,
At runtime I am getting ERR: The assembly reference did not match the assembly definition found.
I was able to gather this information:
*** Assembly Binder Log Entry (6/24/2020 @ 9:08:56 AM) ***
The operation failed.
Bind result: hr = 0x80131040. No description available.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\XXX\yyy.exe
--- A detailed error log follows.
Pre-bind state information
LOG: DisplayName = System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
(Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/XXX/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = yyy.exe
Calling assembly : Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=pp2b13ffcd2eeef21.
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\XXX\yyy.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 4.2.0.0 redirected to 4.2.0.1.
LOG: Post-policy reference: System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=pp2b13ffcd2eeef21
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/XXX/System.Threading.Tasks.Extensions.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\Program Files (x86)\XXX\System.Threading.Tasks.Extensions.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=pp2b13ffcd2eeef21
WRN: Comparing the assembly name resulted in the mismatch: Revision Number
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
*** Assembly Binder Log Entry (6/24/2020 @ 9:08:56 AM) ***
The operation failed.
Bind result: hr = 0x80131040. No description available.
Is there a way to find out which project/Assembly/dependency (The whole recursive chain till the Program.cs) is trying to load System.Threading.Tasks.Extensions
at application load?
THANK FUCKING GOD.
STUMBLING ON TO THIS SAVED MY SANITY.
I HAD THE FUSION LOGGER IN VERBOSE FOR YEARS AND DIDN'T REALIZE IT
I THOUGHT LOADING ASSEMBLIES THROUGH REFLECTION WAS REALLY SLOW
TURNS OUT, I'M THE SLOW ONE.
GOD BLESS YOU.
Now I should install dotnet windows runtime to use this tool. I prefer to have bundled runtime via self-contains publish if it is possible.
I can't see a way to view existing fusion logs stored on the filesystem, except those recorded and tracked by Fusion++. I was hoping for something similar to fuslogvw, where you can pass in an arbitrary log folder path to view the logs inside.
hi,
can you provide this as a windows service.
the idea. we are running tests in teamcity, it would be super cool to enalbed disable fuslog and be able to export the data and make it availabel during build. So users can quickly investigate whats going on
thanks
DevExpress is extremely powerful, but also extremely heavyweight (for example, DevExpress.Utils.v19.2.dll
in the latest release is an entire TWENTY MEGABYTES). For such a simple application that uses such a small subset of the DevExpress features, I'm sure that an open-source component or two would offer almost the same functionality at a much lesser cost (for example: https://github.com/swharden/ScottPlot for graphing).
This would also solve #5.
Have you considered distributing via WinGet?
https://learn.microsoft.com/en-us/windows/package-manager/package/
I can run Fusion++ on my own Windows 10 development box but when I try and do the same on a Windows Server 2016 box (via a Chocolatey install or just by copying the binaries) I get the following message:
Clicking yes leads me to a download page for .NET 5. I have installed the x64, x86 and the hosting packages but still, on running the executable, I get the same prompt to install .NET 5.
These are the currently installed runtimes:
PS C:\Users\automation> dotnet --list-runtimes
Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.4 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.4 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
I was not able to build because Visual Studio could not get:
DevExpress.RichEdit.Core 18.2.7
I could not find it on NuGet.
Here is what VS said:
Restoring NuGet packages...
To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the NuGet Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'
NuGet Package restore failed for project Fusion++: NuGet.Protocol.Core.Types.FatalProtocolException: Unable to find version '18.2.7' of package 'DevExpress.RichEdit.Core'.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.