c# - ошибка компиляции с таргетингом на Compact Net Framework 3.5 - нет перегрузки для метода GetString, принимающего аргументы "1"

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

Вопрос

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

Фон:Я пишу программное обеспечение для Windows Mobile на VB.NET, среди задач которого необходимо подключение к почтовому серверу для отправки и получения электронной почты.В результате мне также нужен Mime-парсер (для декодирования и кодирования) электронных писем, чтобы получать вложения.Сначала я подумал написать небольшой «хак» для решения этой проблемы (используя обычный анализ строк), но потом увидел проект, написанный на C#, в КодПроекте который, как я думал, я внедрю в свое решение.Я мало что знаю о 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. сс.

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

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

С уважением и поздравлением всех вас с наступающим Новым годом.

RGDS, Moster67

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

Решение

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

...GetString(b, 0, b.Length);

Другие советы

Если вы посмотрите класс 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, он не может найти эту перегрузку, поэтому вам придется добавить смещение целого числа и счетчик целых чисел.

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

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

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

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

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

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

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

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