Frage

Verwendung von .NET 2.0.

System.Drawing befindet sich in meiner Referenzliste.

Hier ist mein using Stellungnahme:

using System.Drawing;

Hier ist der Code:

private static Rectangle rScreen;

Hier ist der Fehler in dieser Zeile:

Fehlertext:Der Typ- oder Namespacename „Rectangle“ existiert nicht im Namespace „System.Drawing“ (fehlt Ihnen ein Assemblyverweis?)

Warum?

BEARBEITEN:Kompilierungscode hinzugefügt:

Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("CompilerVersion", "v3.5");

CSharpCodeProvider codeProvider = new CSharpCodeProvider(dict);

CompilerParameters parameters = new CompilerParameters();

{
    parameters.ReferencedAssemblies.Add("System.Drawing.dll");

    parameters.ReferencedAssemblies.Add("System.dll");

    parameters.ReferencedAssemblies.Add("System.Core.dll");

    parameters.ReferencedAssemblies.Add("System.Data.dll");

    parameters.ReferencedAssemblies.Add("System.Data.Linq.dll");

    parameters.ReferencedAssemblies.Add("System.DirectoryServices.dll");

    parameters.ReferencedAssemblies.Add("System.Configuration.dll");

    parameters.ReferencedAssemblies.Add("System.Web.dll");

    parameters.ReferencedAssemblies.Add("System.Xml.dll");

    parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");

    parameters.ReferencedAssemblies.Add("System.Web.Services.dll");

    parameters.ReferencedAssemblies.Add("System.ServiceModel.dll");

    parameters.ReferencedAssemblies.Add("System.IdentityModel.dll");

    parameters.ReferencedAssemblies.Add(string.Format(@"{0}{1}Microsoft.ReportViewer.Common.dll", AppDomain.CurrentDomain.RelativeSearchPath, @"\ReportViewer\"));

    parameters.ReferencedAssemblies.Add(string.Format(@"{0}{1}Microsoft.ReportViewer.WebForms.dll", AppDomain.CurrentDomain.RelativeSearchPath, @"\ReportViewer\"));
}

CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sources.ToArray());

try
{
    ApexAssemblyManager.dynamicAssemblies.Add(hashKey, new DynamicAssemlby(results.CompiledAssembly));

    return ApexAssemblyManager.dynamicAssemblies[hashKey].CreateInstance(typeName);
}

Alle anderen ReferencedAssemblies funktionieren und funktionieren schon seit langer Zeit.Dies ist das erste Mal, dass ich einen solchen Fehler hatte.

Ich habe sichergestellt und noch einmal überprüft, dass die Referenz hinzugefügt wurde.Wenn ich versuche, es erneut zum Projekt hinzuzufügen, erhalte ich die Meldung, dass die Referenz bereits vorhanden ist.

Danke

War es hilfreich?

Lösung

Sie geben in den Kommentaren und Tags an, dass dies von einer anderen Anwendung dynamisch kompiliert wird.Es ist daher wahrscheinlich, dass dieser andere Antrag nicht enthalten ist System.Drawing.dll als Referenz bei der Kompilierung verwendet und daher ist der Typ unaufgelöst.Es reicht nicht aus, nur zu sagen using System.Drawing, muss die Assembly, die diesen Namespace und seine Typen definiert, auch an den Compiler übergeben werden.

Im Code geschieht dies mit a CompilerParameters Instanz, die über einen der übergeben wurde CompileAssemblyFrom... Anrufe an die CodeDomProvider Instanz, die die Kompilierung ausführt (in diesem Fall die CSharpCodeProvider).Der CompilerParameters.ReferencedAssemblies Die Sammlung gibt dem Compiler an, welche Assemblys beim Versuch einer Typauflösung berücksichtigt werden sollen.

Aktualisieren
Versuchen Sie es explizit hinzuzufügen mscorlib zu den Referenzen.

Ich weiß auch nicht, ob das damit zusammenhängt, aber wie Sie einen Server erwähnt haben (ist es eine Art Dienst?), MSDN-Staaten:

Klassen innerhalb des Systems.Der Versuch, diese Klassen innerhalb eines dieser Anwendungstypen aus zu verwenden, kann unerwartete Probleme verursachen, wie z. B. verminderte Serviceleistung und Laufzeitausnahmen.Eine unterstützte Alternative finden Sie unter Windows -Bildgebungskomponenten.

Ich würde sagen, dass dies ein unerwartetes Problem ist, obwohl ich nicht erwarten würde, dass Probleme während eines Kompilierungsvorgangs auftreten, sondern eher beim Ausführen von Code.Allerdings wird dies in der Dokumentation nicht wirklich spezifiziert, sodass es auf die Verwendung von zutreffen könnte System.Drawing.dll als Referenz im Allgemeinen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top