У меня есть проект C#, который я начал 4 или 5 месяцев назад. Я начал его в Visual Studio 2022, и в проекте используются C# и Windows Forms.
Я немного поработал над этим и оставил это. Теперь я вернулся к этому. Я хотел продолжить кодирование, но наткнулся на проблему, при которой вижу эту ошибку:
реализация интерфейса функции по умолчанию недоступна в С# 7.3
Я обнаружил, что использую более старую версию .NET 4.8. Я изменил целевую структуру в своем файле .csproj
, добавив <TargetFramework>net8.0</TargetFramework>
и <LangVersion>latest</LangVersion>
, а также удалив старый TargetFramework
.
Затем у меня возникла проблема с «дубликатами элементов компиляции», поэтому я добавил <EnableDefaultCompileItems>false<\EnableDefaultCompileItems>
и <EnableDefaultEmbeddedResourceItems>false<\EnableDefaultEmbeddedResourceItems>
.
Теперь я больше не понимаю этой проблемы, но, к сожалению, у меня есть другие проблемы, которые я не могу решить.
Во-первых, я получаю эти два сообщения:
Файл не поддерживает синтаксический анализ или генерацию кода, поскольку он не содержится в проекте, поддерживающем этот код.
У меня также есть почти 200 ошибок, которые выглядят следующим образом:
Тип или пространство имен не существует в пространстве имен (вам не хватает ссылки на сборку)
(Я видел эту ссылку , но у меня действительно версия 8.0).
Имя типа не найдено в пространстве имен. Этот тип был перенаправлен в сборку... Рассмотрите возможность добавления ссылки на эту сборку.
Похоже, что все проблемы связаны с формами, поскольку все ошибки, которые я нажимал до сих пор, указывают мне на такую строку:
private System.Windows.Forms.DataGridViewTextBoxColumn totalSpacesDataGridViewTextBoxColumn;
Я предполагаю, что это как-то связано с двумя сообщениями о том, что у меня проблема с двумя формами. Я также пытался добавить ссылки, но это не сработало.
Кто-нибудь знает, как это исправить?
На самом деле, запустить проект заново не такая уж проблема, но делать формы заново не хочется, так как это заняло некоторое время.
Обновлено: с момента первого сообщения я читал и пробовал что-то из комментариев. После добавления <TargetFramework>net8.0-windows</TargetFramework>
и <UseWindowsForms>true</UseWindowsForms>
эта проблема больше не возникает.
Файл не поддерживает синтаксический анализ или генерацию кода, поскольку он не содержится в проекте, поддерживающем этот код.
Я не понимаю другой проблемы с Forms
, но теперь я понимаю ее в других частях кода AirportSystemDataSet
и AirportSystemDataSetTableAddapter
. Пример:
Не удалось найти тип или пространство имен пространства имен AirportSystemDataSet (вам не хватает директивы using или ссылки на сборку?)
Наконец, я также получаю это предупреждение
Не удалось создать сборку-оболочку для библиотеки типов "{215d64d2-031c-33c7-96e3-61794cd1ee61}". Библиотека типов «System_Windows_Forms» была экспортирована из сборки CLR и не может быть повторно импортирована как сборка CLR.
Редактировать 2.0 (Ответ на вопросы): Мне удалось запустить свой проект.
Проблема с набором данных была устранена путем закомментирования кода, ссылающегося на все компоненты, которые были наборами данных, и удаления их. После этого мои формы больше не отображали ошибок.
Чтобы исправить другую проблему, мне нужно было удалить этот блок кода из файла .csproj
:
<COMReference Include = "System_Windows_Forms">
<Guid>{215d64d2-031c-33c7-96e3-61794cd1ee61}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>0</VersionMinor>
<WrapperTool>tlbimp</WrapperTool>
</COMReference>
У меня также были некоторые ошибки, связанные с дублирующими сборками, которые я только что закомментировал. Я попробовал запустить проект, и это сработало.
🤔 А знаете ли вы, что...
C# поддерживает асинхронное и параллельное программирование с помощью ключевых слов async и await.
Я обновил свои приложения-фреймворки с помощью .NET Upgrade Assistant. Очень хорошо работал для моих приложений WPF и библиотек классов. Прилично для проекта Forms, который я попробовал.
.NET 4.8 и .NET 8 имеют множество различий в дизайне, особенно в API и среде выполнения. Хотя .NET 8 остается совместимой со многими функциями .NET Framework, различия в среде выполнения, API и инструментах могут потребовать внесения изменений. Microsoft предлагает инструменты и документацию для помощи в миграции, но важно тщательное планирование и тестирование.
Следующее может помочь вам понять различия API и решить проблемы совместимости при миграции проекта на .NET 8:
https://learn.microsoft.com/en-us/dotnet/api/
https://learn.microsoft.com/en-us/dotnet/desktop/winforms/migration/?view=netdesktop-8.0
Мне удалось найти ответ на свой вопрос из комментариев и поиска в Google. Вот объяснение того, что я сделал, на случай, если у других людей возникнут подобные проблемы. Первая проблема:
Файл не поддерживает синтаксический анализ или генерацию кода, поскольку он не содержится в проекте, поддерживающем этот код.
Чтобы избавиться от этой ошибки, мне пришлось добавить эти теги, чтобы правильно обновить проект:
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
Это также решило проблему с пространствами имен, связанную с Forms
. Вторая проблема, аналогичная проблеме пространства имен Forms
, но для объектов набора данных:
Тип или пространство имен не существует в пространстве имен (вам не хватает ссылки на сборку)
Имя типа не найдено в пространстве имен. Этот тип был перенаправлен в сборку... Рассмотрите возможность добавления ссылки на эту сборку.
Чтобы решить эту проблему, мне пришлось удалить и закомментировать весь код, связанный с набором данных. После этого, если я пытался добавить что-нибудь, связанное с данными, таких проблем не было. Я предполагаю, что проблема возникла из-за изменений в компонентах в новых выпусках. Тогда возникла другая проблема:
Не удалось создать сборку-оболочку для библиотеки типов "{215d64d2-031c-33c7-96e3-61794cd1ee61}". Библиотека типов «System_Windows_Forms» была экспортирована из сборки CLR и не может быть повторно импортирована как сборка CLR.
Чтобы это исправить, мне пришлось открыть файл .csproj и удалить этот код:
<COMReference Include = "System_Windows_Forms">
<Guid>{215d64d2-031c-33c7-96e3-61794cd1ee61}</Guid>
<VersionMajor>2</VersionMajor>
<VersionMinor>0</VersionMinor>
<WrapperTool>tlbimp</WrapperTool>
</COMReference>
У меня также были некоторые ошибки, связанные с дублирующими сборками, которые я только что закомментировал. Я попробовал запустить проект, и это сработало.