101 Stimmen

Kann System.Windows.Forms nicht verwenden

Ich habe versucht, (mein erstes) ein C#-Programm zu machen:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hallo");
            Console.ReadLine();
        }
    }
}

Dies funktioniert gut, aber wenn ich versuche, System.Windows.Forms zu verwenden:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hallo");
            System.MessageBox("hallo");
            Console.ReadLine();
        }
    }
}

Das ist der Fehler, den ich erhalte:

Fehler   1   Der Typ oder Namesraumname "Windows" ist im Namespace 'System' nicht vorhanden (fehlt Ihnen ein Assemblyverweis?)  C:\Users\Ramy\Documents\Visual Studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs  5   14  ConsoleApplication1

Einige Details: - Ich verwende Visual Studio 2012; - Ich habe das .NET Development Kit installiert; - Es ist eine Konsolenanwendung.

Vielleicht liegt es daran, dass in einer Konsolenanwendung System.Windows.Forms nicht verwendet werden kann? Wenn ja, welches Programm sollte ich verwenden? Ich habe es auch mit einem Formular versucht, aber es wurde nur ein Fenster angezeigt, kein Code.

208voto

Kendall Frey Punkte 41152

Eine Konsolenanwendung fügt nicht automatisch einen Verweis auf System.Windows.Forms.dll hinzu.

Klicken Sie mit der rechten Maustaste auf Ihr Projekt im Lösungs-Explorer und wählen Sie Verweis hinzufügen... und suchen Sie dann nach System.Windows.Forms und fügen Sie es hinzu.

55voto

SilentKnight Punkte 549

Für diejenigen, die Visual Studio 2022 mit .Net Core 6.0 verwenden

Entschuldigung, dass ich diesen Thread wiederbelebe, aber ich habe extra einen Account erstellt, um dies zu tun, da keines der Lösungen, die ich beim stundenlangen Durchsuchen von Google gefunden habe, alleine für mich funktioniert hat und schienen anscheinend nur veraltete Tutorials zu zeigen.

Funktioniert nicht =(

Was für mich funktioniert hat

  1. Doppelklicken Sie auf Ihr Projekt (öffnet das csproj-Editorfenster)

Fügen Sie die folgenden Zeilen hinzu (ersetzen Sie die bestehende TargetFramework Zeile):

net6.0-windows
true

Mein Fenster sieht wie folgt aus:

    Exe
    net6.0-windows
      true
    enable
    enable
  1. Beachten Sie beide Zeilen! Ich habe mehrere Lösungen / Videos gelesen, die nach dem Hinzufügen des "UseWindowsForms" Tags einfach aufgehört haben, was das Problem für mich nicht gelöst hat, auch nach dem Entladen und Neuladen/Schließen und Öffnen usw.

Ich bin auf diese Lösung gestoßen, nachdem ich den "UseWindowsForms" Tag angewendet hatte und dann in der Verzweiflung mein NET Framework in den Eigenschaften auf 5.0 geändert hatte, was dazu führte, dass es funktionierte, und dann feststellte, dass es auch bei der Änderung zurück auf 6.0 funktioniert hat.

Wenn Sie den Framework-Tag vergessen, können Sie den Effekt in Zukunft einfach erzeugen, indem Sie Ihre Eigenschaften hin und her wechseln...

  1. Klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu Eigenschaften.

  2. Ändern Sie das Zielframework von .NET 6.0...zu....NET 5.0

  3. Wechseln Sie zurück zu Ihrem Code. Nach ein paar Momenten wird das System.Windows.Forms sich richtig verbinden.

  4. Öffnen Sie wieder die Eigenschaften.

  5. Ändern Sie das Zielframework von .Net 5.0 zurück zu .Net 6.0

Herzlichen Glückwunsch

Sie haben (oder zumindest ich habe) ein .Net 6.0-Projekt, das es mir ermöglicht, System.Windows.Forms zu verwenden (einschließlich der Zwischenablage, die viele hier vermutlich suchen...).

Ich habe dazu sorgfältige Tests durchgeführt, es mehrmals in verschiedenen Projekten getestet und es (zumindest für meine Konfiguration) funktioniert einwandfrei!

Übrigens: Für diejenigen, die sich fragen, das [STAThread]-Attribut-Tag, das in den Bildern zu sehen ist, ist erforderlich, um der Clipboard-Klasse die Funktion zu ermöglichen. (Deshalb verwende ich in meinem Beispiel keine Top-Level-Anweisungen, aber wenn Sie diese Klasse nicht benötigen, funktioniert das Beispiel mit Top-Level-Anweisungen (Ich brauchte es, um meinen Zwischenablagen-Test zu zeigen...).

22voto

aleroot Punkte 68601

Sie müssen dem Projekt den Verweis auf den Namespace hinzufügen: System.Windows.Forms, da er aus irgendeinem Grund noch nicht hinzugefügt wurde. Sie können also einen neuen Verweis aus dem Visual Studio-Menü hinzufügen.

Klicken Sie mit der rechten Maustaste auf "Verweis" "Neuen Verweis hinzufügen" "System.Windows.Forms"

22voto

Fenix Punkte 1883

Hinzufügen des System.Windows.Forms-Verweises erfordert den Projekttyp .NET Framework:

Ich habe den .NET Core-Projekttyp verwendet. Dieser Projekttyp erlaubt es uns nicht, Assemblys in seine Projektverweise aufzunehmen. Bevor ich die System.Windows.Forms-Assembly zu meinen Verweisen hinzufügen konnte, musste ich zum Projekttyp .NET Framework wechseln, wie in der Antwort von Kendall Frey beschrieben.

Hinweis: Unter dem COM-Tab gibt es den Verweis System_Windows_Forms (für sowohl .NET Core als auch .NET Framework). Dies ist nicht der richtige. Es muss System.Windows.Forms unter dem Assemblys-Tab sein.

11voto

jorge Punkte 354

Um den Verweis auf "System.Windows.Forms" hinzuzufügen, scheint es für Visual Studio Community 2017 etwas anders zu sein.

1) Gehen Sie zum Lösungs-Explorer und wählen Sie Verweise aus

Bildbeschreibung hier eingeben

2) Klicken Sie mit der rechten Maustaste und wählen Sie Verweise hinzufügen Bildbeschreibung hier eingeben

3) In Assemblys, System.Windows.Forms überprüfen und auf OK klicken

Bildbeschreibung hier eingeben

4) Das war's.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X