Laden...

Assemblyverweis?

Letzter Beitrag vor 17 Jahren 21 Posts 9.360 Views
Assemblyverweis?

Nabend!

Ich habe ein ganz komisches Problem.
Ich bin vor kurzem von .net 1.1 auf .net 2.0 umgestiegen und verwende weiterhin meine alten 'Hilfs-Klassen' die ich noch unter .net 1.1 geschrieben habe. Dazu gehört ein ExceptionHandler den ich in ein neues Projekt eingebunden habe. Das Ganze hat auch Prima funktioniert, bis ich aus Neugierde etwas im Visual Studio rumgespielt habe und jetzt bekomme ich immer folgende Fehlermeldung:

'Fehler	1	Der Typ- oder Namespacename delLogFile ist im Namespace ExceptionHandler nicht vorhanden. (Fehlt ein Assemblyverweis?)	D:\Microsoft Visual Studio 2005\Eigene\BinaryFileViewer\BinaryFileViewer\frmMain.cs	29	30	BinaryFileViewer
'

Dazu erstmal: Ja, ich habe die dll- Eingebunden und ja, ich habe ein Assemblyverweis hinzugefügt aber es funktioniert nicht. Hier ein bißchen Code der nicht funktioniert:


.
.
.
using ExceptionHandling;

namespace BinaryFileViewer
{
    public partial class frmMain : Form
    {

        private void frmMain_Load(object sender, EventArgs e)
        {
            initApp();
        }

        private void initApp()
        {
            ExceptionHandler.delLogFile();
        }
.
.
.

Wenn ich jetzt allerdings folgendes schreibe:


ExceptionHandling.ExceptionHandler.delLogFile();

dann funktioniert es.

Ich hab nicht die geringste Ahnung woran das liegen kann. Ich denke es ist ein bug im Visual Studio aber vielleicht ist es auch doch ein Anwenderfehler 😉.

Ich bin für jede Hilfe und jeden Tip dankbar!!!

Viele Grüße,
Rahvin

Prüfe doch mal im Code, ob die Klasse ExceptionHandler wirklich im besagten Namespace liegt. Manchmal rutscht da ein Zeichen rein und bums....

Daran liegt es leider auch nicht. Hier nochmal ein Codeauschnitt aus der ExceptionHandler-Klasse, wo der Namespace deklariert wird:


namespace ExceptionHandling
{
	public class ExceptionHandler
	{

Ich hab auch gar nichts am Code selbst geändert aber auf einmal war diese Fehlermeldung da 8oX(... Naja, sehr merkwürdig 🤔.

Könnte es nicht wirklich an irgendeiner Einstellung im Visual Studio liegen?

Woher weiss der eigentlich, dass die Klasse ausgerechnet in diesem Namespace zu suchen sein soll?

Hast du zufällig auch ein

using System.ServiceModel

drin?

Hallo Rahvin,

also ein Assemblyverweis fehlt dir schon mal nicht, sonst würde es ja nicht gehen, wenn du voll qualifizierst.

Ich denke, du musst irgendwo einen Namespace ExceptionHandler definiert haben, der die Probleme verursacht.

Workaround:


using MyExceptionHandler = ExceptionHandling.ExceptionHandler;
...
MyExceptionHandler.delLogFile();

BTW: Methodennamen sollten in PascalCase also mit großen Anfangsbuchstaben geschrieben sein, also DelLogFile.

herbivore

Woher weiss der eigentlich, dass die Klasse ausgerechnet in diesem Namespace zu suchen sein soll?

Ich hab die Klasse selber geschrieben und schon oft benutzt, daher weiß ich, dass die Klasse ausgerechnet in diesem Namespace zu suchen ist 😉.

Hallo Rahvin,

also ein Assemblyverweis fehlt dir schon mal nicht, sonst würde es ja nicht gehen, wenn du voll qualifizierst.

Ich denke, du musst irgendwo einen Namespace ExceptionHandler definiert haben, der die Probleme verursacht.

Workaround:

C#-Code:
using MyExceptionHandler = ExceptionHandling.ExceptionHandler;
...
MyExceptionHandler.delLogFile();

BTW: Methodennamen sollten in PascalCase also mit großen Anfangsbuchstaben geschrieben sein, also DelLogFile.

herbivore

Ich habe deinen Tip mal ausprobiert aber es kommt die gleiche Fehlermeldung 🤔

Der Namespace ist nur in der Datei ExceptionHandler.cs vorhanden, in meinem Hauptprogramm hab ich den definitiv nicht noch einmal definiert.

So, hab nochmal was ausprobiert. Ich hab ein neues, kleines Testprogramm erstellt und der Fehler tritt auch dort auf 8o. Hier mal der Quelltext:


using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ExceptionHandling;

namespace ExceptionHandlerTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ExceptionHandler.delLogFile(); 
        }
    }
}

Fehler:


Fehler	1	Der Typ- oder Namespacename delLogFile ist im Namespace ExceptionHandler nicht vorhanden. (Fehlt ein Assemblyverweis?)	D:\Microsoft Visual Studio 2005\Eigene\ExceptionHandlerTest\ExceptionHandlerTest\Form1.cs	21	30	ExceptionHandlerTest


Ich hab an der ExceptionHandler-Klasse aber nichts geändert, sondern nur neu kompiliert. Hier auch noch ein Auszug aus der ExeptionHandler-Klasse:


using System;
using System.IO;
using System.Diagnostics;
using System.Collections;

namespace ExceptionHandling
{
	public class ExceptionHandler
	{
.
.
.
		private ExceptionHandler()
		{
		}

		static ExceptionHandler()
		{
			logFile = "log.txt";
			activeKeywordsList = new Hashtable();
		}
.
.
.
	}
}


Jemand ne Idee 😉?

Mhh, keiner ne Idee?

Hier muss es doch noch den einen oder anderen Experten geben der mein Problemchen beheben kann 😉.

Bin wirklich für jeden Tip dankbar 🙂!

Kannst du vielleicht mal nen kleines Beispielprojekt posten wo der Fehler auftritt?

Baka wa shinanakya naoranai.

Mein XING Profil.

Hallo Rahvin,

ich denke, es liegt an dem, was ich schon geschrieben habe. Mach mal ein minimales Test-Projekt, das den Fehler zeigt, und postes es hier.

herbivore

Fehler    1    Der Typ- oder Namespacename delLogFile ist im Namespace ExceptionHandler nicht vorhanden. (Fehlt ein Assemblyverweis?)    D:\Microsoft Visual Studio

d.h., ExceptionHandler wird ganz offensichtlich als Namespace erkannt,


            ExceptionHandling.ExceptionHandler.delLogFile();

könnte da vielleicht deine Probleme lösen, notfalls auch


            Global.<Stammnamespace>.ExceptionHandling.ExceptionHandler.delLogFile();

Danke erstmal für die schnellen Antworten 😉.

@ herbivore & talla:

Also hier nochmal ein minimales Testprogramm:


using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ExceptionHandling;

namespace ExceptionHandlerTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ExceptionHandler.delLogFile();
        }
    }
}

Das gleiche Problem, der gleiche Fehler 😦.
Ein paar Posts vorher habe ich auch ein Auschnitt aus dem ExceptionHandler selbst gepostet.

Was mir noch aufgefallen ist, dass die Fehlermeldung lautet "Der Typ- oder Namespacename delLogFile ist im Namespace ExceptionHandler nicht vorhanden". Allerdings ist ExceptionHandler die Klasse und der Namespace lautet ExceptionHandling. Kann da vielleicht das Problem liegen?

Gibt es vielleicht irgendwelche Compiler-Einstellungen die was mit dem Namespace zu tun haben?

@onlinegurke:

Wenn ich den Namespace mit angebe, dann klappts, also quasi:


ExceptionHandling.ExceptionHandler.delLogFile();

Aber genau das möchte ich eigentlich nicht 😉.

Hallo Rahvin,

naja, Codeausschnitte hattest du ja schon gepostet. Was wir jetzt brauchen ist ein minimales Testprogramm im Sinne von short but complete.

herbivore

PS: Sowas Form- und Codehandling ist short but complete. Alles drin, damit man es ohne weiteres übersetzen kann.

Achs so...

Ich bin gerade auf der Arbeit aber ich werde heute Abend mal ein kleines Programm im Sinne short but complete posten.

Wenn das ok wäre, dann könnte ich die Sourcen auch kurz zippen und hier ebenfalls posten...

Hi, habs leider doch erst jetzt geschafft mich mal um ein Beispielprogramm zu kümmern.

Wäre nett, wenn sich mal jemand die Sourcen im Anhang angucken kann. Ich habe alles auf das wesentlichste beschränkt und der Fehler tritt immer noch auf X(.

Vielen Dank im vorraus!

Gruß,
Rahvin

Hallo Rahvin,

also wenn ich nur Program.cs Form1.cs Form1.Designer.cs und ExceptionHandler.cs zusammen übersetze, gibt es keine Probleme. Aber in Settings.Designer.cs taucht der namespace ExceptionHandler.Properties auf, und der macht es kaputt. Den musst du umbenennen. Dann geht es.

Es ist also genau, was ich oben gesagt habe:

Ich denke, du musst irgendwo einen Namespace ExceptionHandler definiert haben, der die Probleme verursacht.

herbivore

@herbivore:

Tatsächlich, es klappt 😄!!! Vielen Dank, ich glaube darauf wäre ich nie gekommen!

Ist allerdings schon komisch, denn die Datei wurde vom Visual Studio angelegt, nachdem ich etwas in den Projekteinstellungen rumgespielt habe 😉. Wieso legt das VS die Datei fehlerhaft an? Naja, auch egal, denn jetzt funktioniert es ja 🙂... nochmal vielen Dank!

Hallo Rahvin,

die von VS erstellte Datei ist ja nicht fehlerhaft. Der Fehler lag darin, dass du in deinem Code einen Namen verwendet hattest, der nicht eindeutig war. Durch die vollständige Qualifizierung war der Fehler genauso vermeidbar wie durch das Entfernen der Mehrdeutigkeit.

herbivore

Verstehe ich nicht so ganz...

Nochmal ganz kurz 😉:

  1. Ich habe das ExceptionHandler-Projekt von .net V.1.1 auf V.2 konvertiert.
  2. Unter Projekteigentschaften gab es einen Punkt 'Eigenschaften' (oder so ähnlich, bin gerade auf der Arbeit und kann nicht nachgucken).
    Dort stand dann sinngemäß, das es keine Datei 'xyz' gibt. Ich habe dann auf einen Link geklickt und dann wurde diese Datei 'Settings.Designer.cs' angelegt.
  3. Ab diesem Punkt ist dann immer der Fehler aufgetreten ohne das ich selber nur eine Zeile Code verändert hätte.

Warum legt das VS diese Datei an und vergibt anstatt dem Namen des Namespaces den Namen der Klasse in dieser Datei?

Wofür sind diese 'Properties' überhaupt gut?

(Sorry, falls ich mich etwas umständlich ausdrücke 😉)

Hallo Rahvin,

Warum legt das VS diese Datei an [...]?

weil du VS das erlaubt hast. Entsprechend muss du dann auch mit den Auswirkungen leben.

herbivore

Vielleicht ist ja als Standardnamespace bei dir ExceptionHandler eingetragen... das kann ma nauch nachträglich ändern... mußt mal schaun bei der Seite wo man den Assemblynamen angibt steht das mit.