Обновление (02.08.204), чтобы прояснить мой вопрос:
При попытке использовать DLL (.NET 8.0) из моего приложения Windows Forms (.NET Framework 4.7.2) я получаю сообщение «Необработанное исключение», показанное на снимке экрана ниже. Почему я получаю эту ошибку и как ее устранить?
Оригинал
у меня есть
ElabAddInMetricsDb
ElabAddInMetricsDbDemo
В VS для библиотеки классов я настроил Target Framework:
В VS для приложения форм Windows (.Net Framework) я настроил Target Framework:
В приложении форм Windows (.Net Framework) я добавил ссылку на DLL библиотеки классов:
Когда я создаю и выполняю приложение Windows Forms, я получаю:
Итак, мне не хватает программного обеспечения среды выполнения версии 8, или есть несоответствие между моей библиотекой классов и приложением Windows, или что-то еще?
Примечание. См. ниже. Панель управления -> Программы для моего компьютера показывает .NET SDK 8.
~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
К вашему сведению
Моя машина разработки работает под управлением Windows 10 Enterprise, 22H2, 64-разрядной версии и Visual Studio 2022 Enterprise.
Панель управления (фильтр = .net) показывает:
C:\Windows\Microsoft.Net\Framework64 показывает:
Установили ли вы пакет System.Runtime в свой проект VS и какой у него номер версии?
Проекты .Net могут использовать только библиотеки, предназначенные для той же или более ранней версии .net. Таким образом, проекты .Net framework не могут использовать библиотеки .Net 8. Это должно привести к ошибке, если вы используете обычную ссылку на проект. Самое простое решение — просто изменить приложение winforms на .Net 8.
Вы также можете изменить свою библиотеку на целевую платформу .Net или стандарт .Net. Последнее позволит использовать библиотеку как для проектов .Net framework, так и для проектов .Net 5+.
Теперь я вижу, что мой первоначальный вопрос не попал в цель, потому что в нем говорилось о проблеме, с которой я столкнулся, а не о моей цели. В результате в вашем ответе отсутствуют важные детали. Но опять же моя вина. Смотрите мой обновленный вопрос и мой ответ.
Спасибо JonasH за объяснение «почему» («.Net-проекты могут использовать только библиотеки, ориентированные на ту же или более низкую версию .net».) и предоставление сводного ответа на вопрос «как это исправить» («измените приложение winforms» в .Net 8").
После того, как я собрал кусочки многих поисков, мне помогли приведенные ниже процедуры.
Я сделал чистый лист:
Переустановлено что-то:
Примечание. Я считаю, что вы можете пропустить предыдущий шаг и затем добавить .NET 8.0 в качестве компонент установки Visual Studio 2022, но я думаю, что установка SDK дает вам больше «вещей» - хотя не знаю, что именно.
Восстановил всё:
Результат: обновленное приложение Windows Forms отлично работало с библиотекой классов (DLL) .NET 8.0.
Примечание. Если вы хотите использовать предварительную версию .NET SDK (например, .NET 9.0) в VS, вам необходимо установить параметр VS:
ОБНОВЛЕНИЕ от 04.08.2024
Спасибо Джими за то, что рассказал мне о существовании двух шаблонов Windows Forms. До его комментария я знал только о шаблоне .NET Framework.
Итак, вот все сценарии и действия, о которых я знаю на данный момент. Само собой разумеется, что для их использования вам придется вручную установить SDK .NET 6.0, 8.0 или 9.0 (в настоящее время 9.0 является предварительной версией). Например, мне пришлось вручную установить .NET 8.0 SDK и .NET Framework 4.8.1, чтобы использовать их в различных проектах.
Примечание. Как предложил JonasH, я бы не решился (1) «изменить вашу библиотеку на целевую платформу .Net». На основании https://dotnet.microsoft.com/en-us/platform/dotnet-standard моя библиотека классов (DLL) должна быть ориентирована на .NET Standard 2.0, что кажется серьезной угрозой безопасности из-за ее возраста. . Я говорю это, потому что попробовал, и VS показал ошибку безопасности для .NET Standard 2.0 в списке ошибок, когда я создавал библиотеку классов.
Я только что открыл Visual Studio и попытался создать проект Winforms, и все .NET 6, 7 и 8 доступны для выбора. Кроме того, похоже, вы отредактировали свой вопрос до такой степени, что он больше не соответствует заголовку. Если вы столкнулись с новой проблемой, я бы предложил опубликовать новый вопрос с обновленным заголовком.
@Ramza you edited your question to the point that it no longer matches the title
: Не согласен. В исходном заголовке указывалась ошибка, возникшая при попытке использовать DLL .NET 8.0 из приложения Winforms .NET Framework 4.7.2. Я изменил вопрос, чтобы спросить, почему я не могу этого сделать, вместо того, чтобы спрашивать об ошибке. Если при создании нового проекта Winforms вы видите целевые платформы NET 6,-8, возможно, вы могли бы составить ответ, показывающий нам, какие версии .NET framework, .NET SDK и Visual Studio вы используете и нужны ли они вам. расширение. Тот факт, что это работает для вас, бесполезен.
При создании нового или существующего Windows Forms app (.NET Framework)
я не вижу .NET 8.0: конечно, нет. .NET Framework и .NET (ранее .NET Core) — это две разные вещи. Вам нужно выбрать шаблон Windows Forms app
— самая последняя версия .NET Framework
— 4.8.1. Это также последняя основная/второстепенная версия, она больше не будет обновляться. Просто версии обслуживания/обновлений безопасности
@Джими, я согласен. Вы проповедуете хору :-). Именно об этом я и говорю в своем комментарии к @Ramza. Я не понимаю, как @Ramza может видеть то, что, по словам @Ramza, он видит: I just opened Visual Studio and attempted to create a Winforms project, and .NET 6, 7, and 8 are all selectable
Потому что они выбрали шаблон Windows Forms app
вместо шаблона Windows Forms app (.NET Framework)
(два разных шаблона, в которых используется .NET (первый) и .NET Framework (второй). То, что вы написали, вообще не подтверждает этот факт, отсюда и мой комментарий.
@Jimi: Я не собирался игнорировать различие между приложением Windows Forms и приложением Windows Forms (.NET Framework). Честно говоря, мне не было ясно ни различие между ними, ни даже существование приложения Windows Forms в качестве отдельного шаблона, пока я не прочитал ваш последний комментарий (мне еще предстоит пройти путь, прежде чем я стану знающим . NET-программист). Я изменил свой ответ, чтобы суммировать все сценарии, о существовании которых мне известно на данный момент. Если вы понизили мой ответ, возможно, моя модификация отменит понижение :-)
Нет, я не минусовал ваш ответ (я редко это делаю, стараюсь исправить то, что можно исправить). Вероятно, это было отклонено из-за того, что я указал в своих комментариях, и, главным образом, из-за того, что вы опубликовали ответ на свой вопрос после того, как изменили заголовок (и, возможно, часть контента, я не проверял). Тебе не следует этого делать. В любом случае, теперь ситуация несколько лучше, так что вы тоже можете проголосовать.
Что, если вы создадите приложение WinForms, также ориентированное на .NET 8?