Во время отладки с помощью программы Monogame я заметил странное поведение в своем коде.
Всякий раз, когда я наводил курсор на точку XNA, я получал следующую ошибку вместо того, чтобы видеть значение точки XNA.
ошибка CS0103: имя DebugDisplayString не существует в текущем контексте
Я напечатал значение точки через ToString (), и результат был пустым AKA "".
Вот мой тест, который я показал на скриншоте:
static void Main(string[] args)
{
Point point = new Point(3, 1);
}
Это стало происходить недавно. Любые идеи?
@JuanR Это из Microsoft.XNA.Framework, компонента библиотеки MonoGame.
Вы бы случайно не ссылались на версию MonoGame с переносимой библиотекой классов в этом проекте, не так ли?
@CraftworkGames Да, да, я. Разве это не то, что нужно ссылаться на программу?
@CraftworkGames Исправлено переключение на версию, отличную от PCL. Если вы дадите такой ответ, я дам вам кредит / приму его.





Класс Point использует атрибут DebuggerDisplay и реализует свойство для предоставления строкового представления, как рекомендовано здесь.
С Источник MonoGame.Framework:
/// <summary>
/// Describes a 2D-point.
/// </summary>
[DataContract]
[DebuggerDisplay("{DebugDisplayString,nq}")]
public struct Point : IEquatable<Point>
{
/// Other code here
internal string DebugDisplayString
{
get
{
return string.Concat(
this.X.ToString(), " ",
this.Y.ToString()
);
}
}
Похоже, что иногда что-то происходит, когда компилятор не может правильно работать с этим атрибутом.
Попробуйте очистить раствор и восстановить его. Устранена проблема для другие.
@JaunR Хорошее обоснованное предположение, но одна проблема: когда я выводю значения X и Y точки, это не 3, 1, как должно быть. Это 0, 0. Интересно, является ли это сообщение об ошибке просто симптомом более глубокой проблемы.
@ SneakyTactician3: Верно. Вы уверены, что у вас где-то не определен собственный класс Point? Вы уверены, что он использует XNA?
Я уверен, что это XNA. Все мои точечные классы называются по-разному, и когда я перехожу к определению, он переходит к точке XNA.
Вопрос craftworkgames привел меня к тому, чтобы исправить это, установив пакет для конкретной платформы, а не портативный.
Это происходит, когда вы ссылаетесь на PCL-версию MonoGame.
Причина в том, что PCL использует технику приманка и переключатель, поэтому DLL фактически не содержит реализации.
Point- это класс или структура, которые вы создали, или этоSystem.Drawing?