«Прямоугольник» не существует в пространстве имен «System.Drawing».

StackOverflow https://stackoverflow.com/questions/6021153

Вопрос

Использование .NET 2.0.

System.Drawing находится в моем списке рекомендаций.

Вот мой using заявление:

using System.Drawing;

Вот код:

private static Rectangle rScreen;

Вот ошибка в этой строке:

Текст ошибки:Имя типа или пространства имен «Прямоугольник» не существует в пространстве имен «System.Drawing» (вам не хватает ссылки на сборку?)

Почему?

РЕДАКТИРОВАТЬ:Добавлен код компиляции:

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

Все остальные ReferencedAssemblies работают и работают уже давно.Такая ошибка у меня впервые.

Я убедился и дважды проверил, что ссылка добавлена.Если я попытаюсь добавить его в проект еще раз, я получу сообщение о том, что ссылка уже существует.

Спасибо

Это было полезно?

Решение

В комментариях и тегах вы указываете, что это динамически компилируется другим приложением.Поэтому вполне вероятно, что это другое приложение не включает System.Drawing.dll в качестве ссылки при выполнении компиляции, поэтому тип не разрешен.Недостаточно просто констатировать using System.Drawing, сборка, определяющая это пространство имен и его типы, также должна быть передана компилятору.

В коде это делается с помощью CompilerParameters экземпляр, переданный через один из CompileAssemblyFrom... звонки в CodeDomProvider экземпляр, выполняющий компиляцию (в данном случае CSharpCodeProvider).А CompilerParameters.ReferencedAssemblies Коллекция указывает компилятору, на какие сборки следует обращать внимание при попытке выполнить разрешение типов.

Обновлять
Попробуйте явно добавить mscorlib к ссылкам.

Кроме того, я не знаю, связано ли это с этим, но, как вы упомянули сервер (это какой-то сервис?), MSDN заявляет:

Классы в системе. Распространение имен не поддерживается для использования в службе Windows или ASP.NET.Попытка использовать эти классы из одного из этих типов приложений может создать неожиданные проблемы, такие как снижение производительности обслуживания и исключения времени выполнения.Поддерживаемая альтернатива, см. Компоненты визуализации Windows.

Я бы сказал, что это квалифицируется как неожиданная проблема, хотя я бы не ожидал, что проблемы проявятся во время процесса компиляции, а скорее при выполнении кода.Тем не менее, они на самом деле не указывают это в документации, поэтому это может относиться к использованию System.Drawing.dll как ссылка в целом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top