Я пытаюсь обновить старинное приложение vb winform с платформы 4.72 до .NET 8. Я использую предварительный просмотр Visual Studio 2022 (последняя версия). Я сократил количество ошибок, возникающих в процессе сборки, с более чем 9000 до 1. Кажется, эту проблему решить труднее всего. В окне ошибки получаю такое сообщение:
Ошибка (активная) "& e_emb.Message) Файл: vbc, строка 1
В моем окне вывода среди множества предупреждений ошибка выглядит следующим образом:
6>\lanserver\haim\DellDoc\Visual Studio \BARDApp12n\Reviewer.vb(3821,13): предупреждение CA1416: этот сайт вызова доступен на всех платформах. ... 6>VBC: MessageBox.Show("Сообщение не было отправлено, из-за следующей ошибки: " & e_emb.Message) 6>\lanserver\haim\DellDoc\BARDApp12n\SRRemindDialog.vb(620,9): предупреждение CA1416: ... 6>\lanserver\haim\DellDoc\BARDApp12n\Reviewer.vb(3814,21): предупреждение CA1416: ...
Хотя выходные сообщения не располагаются в каком-то определенном порядке, я устраняю ошибку, если исключаю из проекта reviewer.vb (winform). Моя стратегия сейчас — закомментировать части кода в этой форме, пока не найду виновника. Я не смог найти эту конкретную проблему в Интернете. Есть ли у кого-нибудь идеи, где я могу найти ошибку?
Похоже, где-то в цепочке от сообщения компилятора до окна ошибки есть ошибка, где оно некорректно обрабатывается. Сообщения в выводе компилятора выглядят разумно.
.NET 8 спроектирован как кроссплатформенный, а .NET Framework предназначен для Windows.
Поскольку MessageBox.Show
— это метод Windows Forms, он специфичен для Windows. Чтобы обеспечить совместимость, вам может потребоваться заключить его в блок условной компиляции, если вашему приложению необходимо поддерживать несколько платформ.
Если вы собираетесь использовать это приложение только в Windows, вы можете установить для целевой ОС значение Windows в свойствах проекта для проекта, что устранит предупреждение.
Спасибо #Jiachen за предложение. В этом случае я определенно получил ошибку, как я объяснил в своем ответе, и это помешало компиляции программы. Я постараюсь последовать вашему предложению, чтобы уменьшить количество получаемых мной тысяч предупреждений.
@JiachenLi MessageBox.Show — это не просто метод Windows Forms. Это также допустимо в WPF.
Спасибо @jmcihinney. Всегда приятно, когда на код смотрит другая пара глаз. Я не заметил, что вывод относится к строке MessageBox.Show
. Код в окне сообщения об ошибке был несколько загадочным. Фактический код выглядит следующим образом:
MessageBox.Show("This reviewer has been sent a request." & vbCr & "Do you want to continue?", "Warning", MessageBoxButtons.YesNo)
Я создал строку вне вызова функции. Как ни странно, я также мог исправить ошибку следующим образом:
Dim ermsg = "This reviewer has been sent a request." & vbCr & "Do you want to continue?"
intresp = MessageBox.Show(ermsg, "Warning", MessageBoxButtons.YesNo)
Использование &
или «+» для объединения строк не имело никакого значения, но оно не приняло ни того, ни другого внутри вызова MessageBox.Show()
.
Замена оператора конкатенации строк & на +
не является правильным решением и не может решить вашу проблему. Непонятно, что именно исправило это, но дело было не в этом. Также нет проблем с использованием &
внутри вызова функции.
Я описываю факты. Я согласен, что & и +, вероятно, не имели значения, но любой оператор в вызове функции создал ошибку. У меня в приложении было минимум 10 таких звонков. Всякий раз, когда строка объединялась при вызове функции, я получал ошибку. Как только я исключил вызов функции из ошибки, программа скомпилировалась. Понижение значения этого ответа является искажением фактов.
Просто из любопытства замените vbCr
на System.Environment.NewLine
прямо в MessageBox.Show()
, как это было раньше.
MessageBox аварийно завершает работу, как только я пытаюсь объединить две строки. Даже это вызвало сбой MessageBox.Show("Hello" & "World") (замена & на + не изменила ситуацию).
Это предупреждения, а не ошибки. Они просто говорят вам, что у вас есть код, который будет работать только в Windows, но теоретически может быть выполнен на других платформах. Возможно, существует какой-то способ указать, что ваше приложение предназначено только для Windows, что предотвратит появление этих сообщений об ошибках, но вы можете просто подавить их для этого проекта.