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

Использование .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 работают и работают длямного времени.Я впервые столкнулся с такой ошибкой.

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

Спасибо

1 Ответ

5 голосов
/ 16 мая 2011

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...