Question

Utilisation de .NET 2.0.

System.Drawing est dans ma liste de références.

Voici mon using déclaration:

using System.Drawing;

Voici le code:

private static Rectangle rScreen;

Voici l'erreur sur cette ligne:

Texte d'erreur: le type ou le nom du rectangle de l'espace de noms n'existe pas dans l'espace de noms 'System.Drawing' (manquez-vous une référence d'assemblage?)

Pourquoi?

Modifier: Code de compilation ajouté:

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);
}

Tous les autres aspects référencés fonctionnent et travaillent depuis longtemps. C'est la première fois que j'ai une telle erreur.

J'ai assuré et vérifié que la référence est ajoutée. Si j'essaie de l'ajouter à nouveau au projet, je reçois un message selon lequel la référence existe déjà.

Merci

Était-ce utile?

La solution

Vous indiquez dans les commentaires et les balises que cela est compilé dynamiquement par une autre application. Il est donc probable que cette autre application n'inclut pas System.Drawing.dll comme référence lors de l'exécution de la compilation et, par conséquent, le type n'est pas résolu. Il ne suffit pas de simplement dire using System.Drawing, l'assemblage définit cet espace de noms et ses types doit également être transmis au compilateur.

Dans le code, cela se fait en utilisant un CompilerParameters instance passé via l'un des CompileAssemblyFrom... appels au CodeDomProvider instance qui exécute la compilation (dans ce cas, le CSharpCodeProvider). La CompilerParameters.ReferencedAssemblies La collecte indique au compilateur quels assemblages à regarder lors de la réalisation de la résolution de type.

Mise à jour
Essayez d'ajouter explicitement mscorlib aux références.

De plus, je ne sais pas si cela est lié, mais comme vous l'avez mentionné un serveur (est-ce un service d'une sorte?), États MSDN:

Les classes dans l'espace de noms System.Deding ne sont pas prises en charge pour une utilisation dans un service Windows ou ASP.NET. Tenter d'utiliser ces classes à partir de l'un de ces types d'applications peut produire des problèmes inattendus, tels que les performances de service diminuées et les exceptions d'exécution. Pour une alternative prise en charge, voir les composants d'imagerie Windows.

Je dirais que cela est considéré comme un problème inattendu, même si je ne m'attendrais pas à ce que les problèmes se manifestent lors d'un processus de compilation, mais plutôt lors de l'exécution du code. Cela dit, ils ne spécifient pas vraiment dans la documentation, il pourrait donc s'appliquer à l'utilisation de System.Drawing.dll comme référence en général.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top