c # - ошибка компиляции с таргетингом на Compact Net Framework 3.5 - перегрузка метода GetString не принимает аргументов «1» - PullRequest
2 голосов
/ 31 декабря 2008

У меня на самом деле есть два вопроса относительно одной и той же проблемы, но я думаю, что лучше разделить их, так как я не думаю, что они связаны.

Справочная информация: Я пишу программное обеспечение для Windows Mobile в VB.NET, которое для своей задачи должно подключаться к почтовому серверу для отправки и получения электронной почты. В результате мне также нужен Mime-парсер (для декодирования и кодирования) электронных писем, чтобы получить вложения. Сначала я подумал, что напишу небольшой «хак» для решения этой проблемы (используя обычный синтаксический анализ строк), но потом я увидел проект, написанный на C #, в CodeProject , который, как я думал, я внедрю в свой решение. Я не знаю много о C #, поэтому я просто создал библиотеку классов из классов и использовал ее в своем VB.NET-проекте. Эта библиотека работает очень хорошо, когда я нацеливаюсь на Net Framework на обычных компьютерах с Windows, однако, когда я собирался создать ту же библиотеку, нацеленную на Compact Net Framework, я столкнулся с проблемами. Это естественно, поскольку у Compact Net Framework есть больше ограничений, но я на самом деле не получил столько ошибок - только две, хотя они повторяются в разных местах кода.

Одна из ошибок - это ошибка, процитированная в теме этого вопроса, т. Е. «Перегрузка для метода« GetString »не принимает« 1 »аргументов». Как упомянуто выше, я не знаю много о C #, поэтому я преобразовал класс с ошибкой онлайн в VB-NET, но все же я мало что понимаю. Вот функция, которая выдает указанную выше ошибку:

public virtual string DecodeToString(string s)
{
  byte[] b = DecodeToBytes(s);
  if(m_charset != null)
  {
    //ERROR ON THIS LINE
    return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
  }
  else
  {
    m_charset = System.Text.Encoding.Default.BodyName;
    //ERROR ON THIS LINE
    return System.Text.Encoding.Default.GetString(b);
  }
}

Если для этого класса нужен полный исходный код, я могу опубликовать его в другом сообщении в этой теме или найти его, загрузив код на указанном выше веб-сайте и ознакомившись с классом. с именем MimeCode.cs.

Кто-нибудь, кто может мне помочь? Можно ли как-то переписать вышеуказанную функцию, чтобы преодолеть эту проблему?

Заранее благодарю за помощь.

С уважением и Новым Годом всех вас.

Rgds, moster67

Ответы [ 4 ]

9 голосов
/ 31 декабря 2008

CF .NET требует использования подписи: метод Encoding.GetString (массив [], индекс Int32, число Int32), поэтому попробуйте использовать:

...GetString(b, 0, b.Length);
2 голосов
/ 31 декабря 2008

Если вы посмотрите класс Encoding в MSDN, вы найдете информацию о доступности методов в компактной среде.

http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx

В вашем случае свойство System.Text.Encoding.Default поддерживается платформой .NET Compact Framework 3.5, 2.0, 1.0, поэтому вы должны быть полностью настроены.

Но вот в чем дело. MS иногда отбрасывает методы из реализации класса или, если быть точным, перегружает.

Просмотр документации http://msdn.microsoft.com/en-us/library/system.text.encoding.getstring.aspx вы можете сказать, взглянув на значки (маленькие изображения слева), что, хотя .NET Compact Framework поддерживает класс кодирования, некоторые перегрузки были устранены.

Когда вы передаете массив byte [] методу GetString, он не может найти эту перегрузку, поэтому вам нужно добавить смещение int и число int.

1 голос
/ 31 декабря 2008

Компактная структура, вероятно, не поддерживает перегрузку, которая занимает только байтовый массив. Попробуйте перегрузку, которая принимает байтовый массив, начальный индекс и счетчик и дает ему 0 в качестве начального индекса и b.Length в качестве длины.

0 голосов
/ 31 декабря 2008

Спасибо Майклу, Джону и Руне за ответ на мой вопрос. Используя ваши предложения, я решил проблему и сумел скомпилировать / собрать библиотеку, ориентированную на CF.NET 3.5. Спасибо также ctacke за редактирование моего вопроса и повышение его читаемости.

Кстати, как упоминалось в моем первом посте, у меня была другая проблема, которую я хотел задать в другом потоке и которая не позволила мне собрать библиотеку для CF.NET, а именно строку:

m_charset = System.Text.Encoding.Default.BodyName;

В этом случае проблема заключается в том, что CF.NET не распознает «BodyName». Я не смог найти альтернативных способов или обходных путей для использования набора символов (BodyName извлекает эту информацию), поэтому в конце я просто присвоил ему фиксированное значение (iso-8859-1). К сожалению, это означает, что библиотека не будет обрабатывать все различные наборы символов, но, по крайней мере, код не сломается, и я смог скомпилировать его. В любом случае, для меня этого достаточно, поскольку мое приложение не заботится о текстовых сообщениях - оно использует электронную почту для отправки и получения вложений (аналогично Gmail-диску, но с моим собственным провайдером).

Еще раз спасибо.

С уважением, moster67

...