WinForms Designer zum Laufen bringen

  • C#

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    WinForms Designer zum Laufen bringen

    Hallo,

    ich weiß nicht wieso, aber wenn ich bei mir im Visual Studio ein .NET Core Projekt anlege, dann in die .csproj reingehe, dort von netcoreapp2.0 auf net461 umstelle, dann das Projekt neulade und eine Windows Form hinzufüge, erscheint kein WinForms Designer sondern einfach die Form1.cs und Form1.Designer.cs.

    Mir ist durchaus bewusst das .NET Core kein WinForms unterstützt aber NetFramework tut es. Wenn ich in der Program.cs die Form instanziere und mit ShowDialog öffne öffnet sich die Form auch, also das funktioniert tadelos, nur der Designer lädt nicht im Visual Studio. Weiß einer wie ich das beheben kann?


    Danke im Voraus
    Du erstellst eine .net Core App und änderst dann das Zielframework auf .net 4.6.1

    Wenn du eine .net 4.6.1 Anwendung willst, dann erstelle ein entsprechendes Projekt und switche nicht .net Core -> .net 4.6.1

    Edit: Was für ein Projekttemplate in welcher VS Version nutzt du denn?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Okay worauf ich eigentlich hinaus will: Ich möchte mehrere Frameworks unterstützen. NetCoreApp2.0 und .NET 461.
    Deshalb erstelle ich ein .NET Core Projekt und ändere TargetFramework in TargetFrameworks und setze ;net461 dazu.

    XML-Quellcode

    1. <TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>

    Und eben damit System.Windows.Forms nicht bei NetCoreApp2.0 referenziert wird die Referenzierung mit der Condition:

    XML-Quellcode

    1. <Reference Condition="'$(TargetFramework)' == 'net461'" Include="System.Windows.Forms" />


    Jetzt kann man ja solche Konstanten definieren bzw. standardmäßig ist ja dann für das Framework 4.6.1 net461 als Konstante definiert, sodass ich
    im Code per:

    C#-Quellcode

    1. #if NET461
    2. new Form1().ShowDialog();
    3. #else
    4. Console.WriteLine("This option is not supported for this platform.");
    5. #endif

    unterscheiden kann.

    Ist das so irgendwie möglich? Mein Projekt ist eine Konsolenanwendung die Tools enthält. Einigen Tools reicht es in der Konsole Werte entgegen zu nehmen, andere sind komplexer sodass ich gerne eine GUI bereitstellen möchte. Die Tools die nur die Konsole brauchen sollen aber mit .NET Core laufen weil damit dann Cross-Platform möglich ist. D.h. nur im Net461 Build würde die Form sich öffnen, im .NET Core Build würde in der Konsole eine Ausgabe kommen, unter dieser Platform nicht unterstützt. Ich möchte ungerne zwei verschiedene Projekte dafür erstellen wollen.
    Das ganze funkt ja auch so, nur eben kann ich den Designer nicht benutzen und da frage ich mich wieso.

    Edit: Im Anhang das Testprojekt. Aber der Designer funkt. halt nicht. (@ Moderatoren: Keine Sorge sind keine Binaries drin!)
    Dateien
    • ConsoleApp6.zip

      (1,88 kB, 109 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „seh“ ()

    Ist aber keine Solution im Anhang.

    Welche Visual Studio Version nutzt du?

    Schau mal hier: docs.microsoft.com/en-us/dotne…ject-structure#support-vs
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Ich möchte aber nicht wissen was mein VS2017 Professional daraus macht, sondern was in deiner Solution ist.

    Wenn ich mal einfach ein neues WinForms Projekt erstelle sehe ich viel das im .net Core Projekt nicht vorhanden ist.

    Schon mal überlegt aus zwei (leeren) Projekten eins zu machen wie im MS Docs Link?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Mach das Projekt als .Net Core und verweise in einem .Net 4.6 Projekt auf dieses Projekt, in diesem kannst du dann WinForms verwenden. Hört sich danach an, als gehören die Logisch sowieso getrennt...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @MrTrebron .sln im Anhang, was auch immer du damit willst.



    @jvbsl Dann hab ich aber wieder zwei Projekte was ich eigentlich nicht will.
    Edit: Jetzt hab ich erst richtig verstanden wie du das meinst. Also ein .NET Core Projekt welches netcoreapp2.0 und net461 als TargetFramework hat, die Windows Form sich aber in einer Lib befindet welches dann Full Net Framework 461 ist. Die Lib referenziere ich dann. Dann hab ich nachwievor 2 Projekte aber was solls. Dann sollte der Designer funken.

    Habe mittlerweile auch was zum Thema gefunden: github.com/dotnet/project-system/issues/1272

    Das ist genau das Problem was ich habe, ich denke dann funktioniert es einfach (noch) nicht.
    Dann werd' ich wahrscheinlich einfach ein normales (full) .NET Framwork Projekt mit WinForms für die Tools erstellen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „seh“ ()

    naja man kann auch exe referenzieren, und würde nicht WinForms als Lib machen(weiß auch nicht ob das geht), aber umgekehrt. Außerdem gibt es sonst ja auch noch SharedProjects...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    XXX.Tools Projekt ist netcoreapp2.0;net461
    XXX.UI Projekt ist net461 Class Library wo ich die WinForms reinpacke.

    Jetzt kann ich einfach mit #if NET461 abfragen ob WinForms unterstützt sind und in der Lib die WinForm öffnen. Funktioniert prima so! Und der Designer natürlich dann auch! Genau was ich wollte. Das zweite Projekt hat sich dann doch als nützlich erwiesen, da ich dann die anderen Projekte eventuell auch zusätzlich mit GUI gestalten kann.