dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.39k stars 4.75k forks source link

Edit and Continue support in Linux #12409

Closed the-black-wolf closed 1 year ago

the-black-wolf commented 5 years ago

What is the current state of this feature? I always sort of assumed that Roslyn was on par between platforms seeing as core was designed from ground up to be multi-platform, but I just found out that EnC apparently does not work on Linux and that Rider is passing the blame to lack of underlying support. Its not really a show stopper, but where exactly are we with this? Is there some Linux architecture limitation that prohibits EnC?

RussKeldorph commented 5 years ago

@dotnet/dotnet-diag

noahfalk commented 5 years ago

Its primarily an issue of work and priorities rather than any architectural limitation as far as I know, and most of the work is probably in the testing. All our existing EnC tests use an old version of ildasm written in C++ against the win32 API and the classic Windows-only PDB format/APIs so we can't easily run them on Linux. Some options moving forward are that we rewrite the tests entirely or rewrite all the parts that were coupled to windows, its just work that needs to happen at some point. HTH, -Noah

wocar commented 5 years ago

Is this going to happen anytime soon? EnC is a dealbreaker. Thanks!

nkev commented 5 years ago

+1 From a productivity perspective, this is a really high priority for developers.

coldwarrl commented 4 years ago

Frankly, I do not understand why this issue does not get a higher priority. The story of .NET core is cross-platform - but that implies you have the same productivity also cross-platform.

wocar commented 4 years ago

is this ever gonna happen? thanks

wocar commented 4 years ago

/bump

nkev commented 4 years ago

I thought I'd share my experience with my fellow C# developers. I've been a VB/C# dev for 24 years and never even considered another platform for a long time. Like many of you, I got sick of waiting for random spinning wheels and crashes in Visual Studio so I've given up on this "Edit and Continue in Mono" issue and have by-passed .NET altogether. I first used NodeJS with VS Code in two web projects and I could see what all the hype was about. Node has come a long way and it is so lightweight and in my experience just as fast as .NET Core for web apps (per CPU core). However, I didn't like the bloat in the NPM package manager and missed the strongly typed nature of C# and I don't like TypeScript - it's like a band aid for JS devs! So then I tried Go since it is now over 10 years old and I learned it surprisingly quickly because it's very simple. It compiles super quick directly to a native executable in any platform, so no waiting for VS to compile during dev time or a website to "warm up" (i.e. complile CLR pages again) or even installing any framework on your servers! You just upload the executable and it runs lightning fast immediately. No warm ups. It is super stable and also has a breakpoint debugger in VS-Code for Windows/Mac/Linux. There is even a Razor templating engine for it. Everybody is different of course and you may not like Go, but there are plenty of alternatives out there so I would say don't get stuck in the MS world like I did, try NodeJS, Python, Rust, Go... these languages are in high demand too. For me Go is such a breath of fresh air, that I thought I would share this with you.

mikem8361 commented 4 years ago

/cc: @tommcdon

wocar commented 4 years ago

bump :(

billybraga commented 3 years ago

Any chance of having this in the near future? Any ETA?

stephentoub commented 3 years ago

Any chance of having this in the near future? Any ETA?

There are currently no plans for this.

josephcrivello commented 3 years ago

IMHO, this sends the message that true multi-platform support and feature parity is not Microsoft's goal. This feels more like the "embrace, extend and extinguish" of yore than the new Microsoft. It has been two years and this isn't even on the roadmap. Is Microsoft purposefully reserving this desirable developer productivity feature for Windows in order to create differentiation between their proprietary development environment and cross-platform environments?

the-black-wolf commented 3 years ago

@jcrivelloia IMHO, this sends the message that true multi-platform support and feature parity is not Microsoft's goal. This feels more like the "embrace, extend and extinguish" of yore than the new Microsoft. It has been two years and this isn't even on the roadmap. Is Microsoft purposefully reserving this desirable developer productivity feature for Windows in order to create differentiation between their proprietary development environment and cross-platform environments?

Lol, their "commitment" to multiplatform was more than obvious in net50 when they cancelled .net standard and moved Linux support from dedicated standard implementation (that we could count on always working) into compile warnings/runtime exceptions inside common net50 libraries. So now, when I include a nuget package I have to hold my breath and wait to see if library maker made the effort to attribute it with SupportedOSPlatform and shatter my dreams at the spot or just suppressed warnings so it will just throw exceptions in runtime or when it fails to run. Not to mention that platform incompatibility has even been reduced to analyzer warnings, so unless your CI/CD is geared towards zero warnings, it will just pass through and cause problems down the pipe. All that is somehow better in their heads than knowing it will work because it leaned on .net standard. Of course not, they just made a mess with versioning and decided to "solve" it over our backs to reduce their decoder ring complexity. Now, ask me if there is a net50-linux TFM? Of course not, because apparently, according to one Mr. Souza we are "just a kernel" and thus have no such thing as "API surface" so we don't deserve a TFM. lol, weird flex but ok. I am sure any systemd integration implementation I make and publish on nuget is not really an API surface and will make a lot of sense in net50 so that net50-windows can consume it. :)

The whole Linux "support" was just MS gimmick to get Java/PHP shops to port their server side and web backend code into .net core (and subsequently run it on rented Azure infrastructure which is all they really care about). That should have been obvious to everyone when they banned commits into WPF that would make it work on Mac/Linux. Since Java is now investing heavily in its modernization and this imagined server-side mass exodus is not materializing, so is slowly ending their insincere love affair with multiplatform and Linux in general and all of a sudden they no longer have so much resources to dedicate :) . They messed up big time with dumbing-down Windows and now they are trying to suppress people like me trying to move enterprise desktop operations into Linux sphere by making our lives as difficult as possible. Its a shame though, but I can't say I am surprised. My own damn fault, not sure what I was expecting, the fact of the matter is that they are an unreliable partner and as far as they are considered you should expect only the bare minimum they now have to maintain people they managed to convince to move to net infrastructure, while constantly reminding them that they should "upgrade" to windows to get full benefits. Never thought I utter these words, but Java is looking prettier by the day.

renaa commented 3 years ago

bump

t00 commented 3 years ago

It has been 2.5 years and the progress is at 0. Is there any documentation / whitepaper / blog post about implementation details (for Windows) so that community will have less difficult to intervene and take the initiative?

nkev commented 3 years ago

I have a friend working as a Program Manager at Microsoft who told me "that feature will probably never be implemented because we want to reduce the number of people moving away from using Visual Studio on Windows"... so there you have it.

...and I realized I'm acually one of those people! My team only uses Windows for a legacy C# projects at work... but only because we have to.

All new projects (as well as that legacy project) are now developed in either Go (such a breath of fresh air BTW) or NodeJS.

So it's only a matter of time before MS lose me and my team permanently.. FREEDOM IS A COMIN'...after 25 years of MS "lock-in" :)

josephcrivello commented 3 years ago

I have a friend working as a Program Manager at Microsoft who told me "that feature will probably never be implemented because we want to reduce the number of people moving away from using Visual Studio on Windows"... so there you have it.

Wow! Interesting if true. I think we probably all suspected that this was the case.

Ironically this will probably be the thing that pushes me to finally switch to Go and Rust for most of my coding. Sorry but I am not going to switch back to Windows for Visual Studio.

nkev commented 3 years ago

Yeah, I believe that's probably why MS purchased Xamarin in the first place; To provide a platform for non-Windows devs to adopt C# and bring them over to the more powerful Visual Studio on Windows... (that's completely my belief, BTW). However, I think it's backfiring now because better programming platforms have emerged in the last 5-10 years.

amirvenus commented 3 years ago

Yeah, I believe that's probably why MS purchased Xamarin in the first place; To provide a platform for non-Windows devs to adopt C# and bring them over to the more powerful Visual Studio on Windows... (that's completely my belief, BTW). However, I think it's backfiring now because better programming platforms have emerged in the last 5-10 years.

I think Microsoft needs to purchase LiveSharp now :-)

raiserle commented 2 years ago

Please, please, please ... The community needs this feature on Linux

getson commented 2 years ago

Shame on you Microsoft, you will fail to keep developers forcibly on Windows in a time of many great alternatives! I have 10 years working with your platforms, recently moved to Mac, and I'm considering abandoning C# either because you cheated us with your "cross-platform" C#.

It's time to take a step back guys :).

nkev commented 2 years ago

Well said @getson. I switched to Mac/Linux/Go several years ago and my stress levels during development have significantly reduced! The only Microsoft product I use now is Teams and that's only because I have to for work. Even Teams constantly reminds me how much Microsoft's attitude and internal development processes suck!

I regret the wasted 25 years of C#/VB/SQL Server lockin, but we have to be positive so better late than never, I guess..

olafur-palsson commented 2 years ago

Inb4 Microsoft purchases LiveSharp and deprecates it for Linux users.

Jackcu commented 2 years ago

对的真垃圾,这么多年了还不弄弄好

jonah-adesso commented 1 year ago

Any updates on Edit & Continue??

raiserle commented 1 year ago

对的真垃圾,这么多年了还不弄弄好 Yes, that's nonsense, after all these years it's still not fixed.

Please use language that everyone can read and understand.

adiletelf commented 1 year ago

Can't believe MS didn't implement the feature yet. Being aspiring software engineer I learned .NET and it was great till the moment I bought Mac. Then everything became clanky and not usable (Rider does allow Hot Reload but not while debugging) Even installing MS Sql Server was such a hassle that I switched to PostgreSQL. Reading the comments from other experienced developers makes me reevaluate my choices and leave .NET for Golang/Node.

darkguy2008 commented 1 year ago

@noahfalk hey, happy new year!

How are things looking now after almost 4 years of this bug being open? Will there be some light after the tunnel?

Not having EnC is starting to become a dealbreaker and making me rethink if staying with C#/.NET since 2003 has been a good idea overall... The lack of interest in developer QoL is staggering, to say the least.

mirekkukla commented 1 year ago

Very much looking forward to this fix.

the-black-wolf commented 1 year ago

Don't expect much. I am surprised they have not closed this issue to prevent further discussion of it. WPF team is much faster to stop any discussions that make them look bad.

dylanvdmerwe commented 1 year ago

I am completely dumbfounded that this does not work on Linux. Edit and Continue is HUGE when writing code and debugging things. As .NET is open source and punts at how cross-platform it is, this is a massive let down that it does not work on anything but Windows.

Can we expect any news on this in .NET 8?

heartacker commented 1 year ago

ChatGPT,please creat a PR for EnC

hzk120 commented 1 year ago

Hi Folks, Will this functionality be implemented or not ?

It is much needed for making .Net truly cross-platform in nature.

the-black-wolf commented 1 year ago

ChatGPT,please creat a PR for EnC

Even if you do it like a pro, and submit a PR, they will not merge it.

jkotas commented 1 year ago

Even if you do it like a pro, and submit a PR, they will not merge it.

What makes you think so? We do merge changes that follow the contribution guidelines. BTW: Per contribution guidelines, submitting a large surprise PR would not be the right first step for this one.

the-black-wolf commented 1 year ago

And give Rider/Linux an edge over Windows/VS allowing people to fully develop on Linux? Yea, I won't hold my breath for that, not while MS fully controls the dotnet narrative and direction. You can always prove me wrong, though ;) Still, I think you should first consult someone up the chain of command before offering such hope, somewhere where your team meets the WPF and VS teams, maybe that PM from https://github.com/dotnet/runtime/issues/12409#issuecomment-899921436. I mean at least the WPF team is upright honest about refusing any non-Windows PRs. At least they did not insult us and make us suffer through naïve and childish explanations of why netstandard and linux TFMs were removed from net5.

.NET Foundation is failing at its mission. That much I can say with no doubts and without resorting to slander. They are either fast asleep at the wheel, or ..., well, I'll just stop myself again.

hoangit21 commented 1 year ago

It was so disappointing when I introduced to my friends that .net is now cross-platform, But what kind of cross-platform when the essential feature for developer is hot reload which only works on windows, and 4 years since this topic was created and there hasn't been any roadmap for that. Too disappointed Microsoft!

imuller commented 1 year ago

When will this become available for mac os?

reflectronic commented 1 year ago

hot reload which only works on windows

No, hot reload works outside of the debugger (e.g. dotnet watch) on all platforms. This was enabled in https://github.com/dotnet/runtime/pull/48497

insidiaGithub commented 1 year ago

Do you have any ETA for this feature on macos?

daniel-pdq commented 1 year ago

Also interested in hearing the ETA for this feature

dalival commented 1 year ago

Many .NET developers switched to MacOS since you said it's now a fully cross-platform framework. Lack of hot reload in the debugging mode after we used to it on Windows is feeling uncomfortable. Are you going to add it in the nearest future?

mattbruv commented 1 year ago

Still waiting on this in 2023

KennethHoff commented 1 year ago

Closed this as completed

Say whaaaat :eyes:

KennethHoff commented 1 year ago

Milestone is still future. Does that mean it will not be a part of .Net 8? Or simply forgotten to change it? It has after all only been 18 hours 🫠

reflectronic commented 1 year ago

Does that mean it will not be a part of .Net 8?

The change will be available starting in .NET 8 RC1 (you can see it in the RC1 branch)

the-black-wolf commented 1 year ago

Wow. Color me surprised.

dalival commented 1 year ago

Great, .NET 8 RC1 will probably support this feature for Linux. Does it mean that we can expect support for MacOS in the same release?