C# etwas importieren?
Hallo. Vorab: Ich arbeite relativ selten mit C# und musste bis jetzt auch noch nie Grafisch damit Arbeiten. Ich hab ein Konsolen Projekt erstellt. In dieses Konsolen Projekt will ich jetzt Wpf WebView Fenster erstellen. Aber ich kriege dabei raus:
Der Typ- oder Namespacename "Form" wurde nicht gefunden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis). [WindowGen]csharp(CS0246)
Das mit "Form" ist jetzt nur ein beispiel. Das gibt es natürlich bei mehreren Sachen. Ich war schon so toll und hab mich durch Stackoverflow und Reddit gelesen, allerdings ist mein Englisch ... Fragwürdig. Soweit ich das allerdings verstanden habe, ist in einem C# Projekt nicht direkt alles importierbar (Es muss irgendwie im Ordner oder sowas sein). Wie kann ich zum beispiel Wpf oder WinForms in mein Projekt "einfügen". Ich verwende btw. C#.
Falls die Frage Schwammig Formuliert ist:
Ich kann z.B. nicht auf WinForms zugreifen, dass heißt ich muss es erst importieren. Der Import ist aber nicht möglich, weil er nicht gefunden wird. Also muss ich eine Referenz oder wie das heißt importieren, wie geht das in Visual Studio Code?
Danke im Voraus und Lg.
2 Antworten
Ich hab ein Konsolen Projekt erstellt. In dieses Konsolen Projekt will ich jetzt Wpf WebView Fenster erstellen.
Geht nicht.
Naja - geht schon, aber dann hast Du am Ende auch nur das per Hand geschrieben, was das Template ("dotnet new winforms" oder "dotnet new wpf") für dich generiert.
Dafür ist das SDK-Konzept von Microsoft da. Du erstellst kein Konsole-Projekt und bindest WinForms ein, sondern verwendest das WinForms-SDK - oder nutzt das Template, was es für dich tut. Gleiches für WPF.
Dann ist es auch kein Problem mehr, es einzubinden, es ist ja schon eingebunden.
Allerdings hast Du dann keine Konsole mehr, die musst Du dir erst dazu holen - aber wozu?
Such nach WebView2 - Microsoft erklärt es mit einem neuen Projekt, sowohl für WinForms als auch WPF.
(...) In dieses Konsolen Projekt will ich jetzt Wpf WebView Fenster erstellen. Aber ich kriege dabei raus: Der Typ- oder Namespacename "Form" wurde nicht gefunden (...)
Windows Forms und WPF sind zwei unterschiedliche Frameworks zum Erstellen grafischer Oberflächen. Vermische sie nicht miteinander.
Anfängern würde ich zu Windows Forms raten. C#-Grundlagenkenntnisse werden dennoch vorausgesetzt.
(...) wie geht das in Visual Studio Code?
Ich würde dir eher dazu raten, Visual Studio zu verwenden, wenn du Windows Forms- oder WPF-Projekte erstellen möchtest. Im Gegensatz zu VS Code ist die Anwendung dafür konzipiert und stellt dir hilfreiche Tools (wie einen Designer) zur Verfügung.
Zu einem Vorgehen in VS Code: Du benötigst das dotnet SDK.
Lege einen neuen Ordner an. Über die Konsole kannst du ein Windows Forms-Projekt via
dotnet new winforms
erstellen. Für ein WPF-Projekt würde der Template-Parameter wpf lauten.
Deinen bisherigen Code kannst du anschließend in das Projekt einbinden.
Anfängern würde ich zu Windows Forms raten. C#-Grundlagenkenntnisse werden dennoch vorausgesetzt.
Dazu sei noch erwähnt, dass Win Forms schon vor Jahren für tot erklärt wurde.
Für den Einstieg ok, aber lieber früher als später zu WPF (oder modernere Alternativen) umsteigen. WPF ist zwar auch quasi tot, allerdings hat es viele Konzepte eingeführt, die noch heute top aktuell sind - zum Lernen ist das also immer noch gut geeignet und wird auch immer noch produktiv genutzt.
Win Forms mag einfacher sein, als WPF, sobald man aber konkretere Vorstellungen hat, wird Win Forms schwieriger, weil es für vieles einfach keinen direkten Weg bietet, schnell landet man vor der Aufgabe, selber zu zeichnen und wenn es darum geht, ist WPF deutlich einfacher als WinForms.
Und generell würde ich Anfängern von Win Forms *und* WPF abraten. Beides sind sehr komplexe Frameworks, die zumindest beim Einstieg viel dieser Komplexität verbergen. Aber das kommt recht zügig doch noch auf einen zu und dann sollte man die C#-Grundlagen drauf haben.
Daher wäre es klüger, erst mit der Konsole zu arbeiten und mit den Grundlagen sicher zu werden.
Aber ich kann die meisten Mainstream Sprachen, daher ist mir der Syntax dennoch relativ vertraut und die Grundlagen kenne ich.
Nimm's mir nicht übel, aber ich bezweifle, dass Du die meisten Mainstream Sprachen "kannst" ;)
Ich weiß nicht wie lange Du das schon machst, aber bis man mit einer Sprache und den wichtigsten Basics aus den wichtigsten Frameworks halbwegs sattelfest ist, gehen locker ein/zwei/drei Jahre ins Land, mal mehr mal weniger, je nachdem, wie schnell Du lernst.
Wie Du schreibst, klingt für mich eher so, dass Du für die meisten Mainstream Sprachen YouTube-Tutorials (oder vergleichbares) durch gearbeitet hast - nur verschweigen dir diese Tutorials gerne, dass es dahinter noch einen gewaltigen Berg mehr gibt.
Deine nächste Frage bestätigt meine Vermutung:
Ich will/muss eine Klasse schreiben in der es eine CreateWindow(string title, string url) Methode und eine start() methode gibt. Aber diese Templates dort sind irgendwie super umständlich. Gibt es keinen Weg einfach nur das Zeug importiert zu haben?
Das "dotnet new winforms" erstellt ein vollständig startfähiges Projekt aus einem Template. Umständlich ist da nichts, aber Du musst dich auch damit auseinander setzen und nicht erwarten, dass alles zufällig genau so ist, wie Du es erwartest.
Wenn Du das Template nicht verstehst, dann lese dich in die Doku von Microsoft ein und verwende Visual Studio, das dir noch eine ganze Reihe weiterer Tools bietet.
Und was Du suchst, gibt es da auch, es heißt bloß anders:
// Kopie aus dem Template, nur Kommentare entfernt
static class Program
{
[STAThread]
static void Main() // <= start() Methode
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1()); // <= CreateWindow()
}
}
Titel kannst Du da als Eigenschaft oder in der Form selber setzen.
Und für die WebView: such nach WebView2, das basiert auf der Edge-Engine und sollte das bieten, was Du brauchst.
Danke erstmal. Ich hab mich anscheinend schlecht ausgedrückt. Also erstmal: Ob ich WPF oder WinForms verwende ist was die komplexität angeht relativ egal. Ich klatsch da eh nur ein WebView Widget rein.
Und klar, niemand kann jede Sprache "komplett". Aber z.B. wer die Basics von Java kann der versteht ziemlich gut wie C# funktioniert. Hab btw. diese Sprachen durch nen Studenten gelernt nicht durch YouTube Videos. Was jetzt meine CreateWindow und Start Methode angeht. Die hab ich gerade so halbwegs gut hinbekommen. Für jeden Screen wird jetzt ein Fenster erstellt in die größe gesetzt die ich brauche und hinter die Icons geschoben. Und morgen mach ich dann den Socket Server rein. Vielen dank euch allen für die Hilfe und ausführlichen Antworten/Kommentare!
Ob ich WPF oder WinForms verwende ist was die komplexität angeht relativ egal. Ich klatsch da eh nur ein WebView Widget rein.
Ich hatte mich auf die Antwort von regex9 bezogen.
Aber es stimmt, wenn es nur dabei bleibt, ist es ziemlich egal - falls es dabei bleibt ;)
Aber z.B. wer die Basics von Java kann der versteht ziemlich gut wie C# funktioniert
Nö.
Gut, die rudimentärsten Grundlagen sind sehr ähnlich, nur geht es dir hier nicht darum. C# geht schon seit Jahren einen eigenen Weg und wenn man mit sowas wie Methoden, if und for fertig ist, dann unterscheiden sich beide Sprachen und Frameworks doch schneller als Du denkst.
Was jetzt meine CreateWindow und Start Methode angeht. Die hab ich gerade so halbwegs gut hinbekommen.
Dein Student hat es dir nicht richtig beigebracht und Du scheinst die Hälfte zu überlesen. Du musst nichts halbwegs hinbekommen, es ist schon fertig, Du musst es dir nur generieren lassen. In Visual Studio sind das ein paar Klicks, mit dem dotnet cli ein Befehl.
Danach hast Du ein frisches Projekt, in dem Du jederzeit ein Window bzw. eine Form erstellen und anzeigen kannst. Wenn Du eine Konsole haben willst, dann stelle in der csproj den OutputType von WinExe in Exe um. Oder Du verwendest nur WinForms und startest das Projekt aus einem Batch-Skript mit Parametern, je nachdem, was Du brauchst. Oder ein zweites Konsolenprojekt, was das WebView2-Projekt startet. Oder oder oder
Erstmal danke für die Antwort. Vorwissen über C# direkt hab ich nur wenig. Aber ich kann die meisten Mainstream Sprachen, daher ist mir der Syntax dennoch relativ vertraut und die Grundlagen kenne ich.
Was dieses "dotnet new winforms" angeht:
Ich will/muss eine Klasse schreiben in der es eine CreateWindow(string title, string url) Methode und eine start() methode gibt. Aber diese Templates dort sind irgendwie super umständlich. Gibt es keinen Weg einfach nur das Zeug importiert zu haben?