Ahmad_kelany Ответов: 2

Как правильно ссылаться на пакет NuGet .NET standard 2.0 в проекте winforms .NET framework 4.8?


Всем привет,

У меня была библиотека .Net Standard 2.1, на которую я пытался ссылаться в приложении WinForms .Net Framework 4.8, но обнаружил, что она не работает .Net Standard 2.1 и .Net Framework 4.8 несовместимы..

Итак, я изменил библиотеку классов на ссылку .Net Standard 2.0 и заново построил и перенес dll-файл release в приложение winforms,

Но я получил следующее исключение:
Цитата:
System.IO.FileNotFoundException: 'не удалось загрузить файл или сборку 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' или одну из его зависимостей. Система не может найти указанный файл.'
Внутреннее Исключение:
FileNotFoundException: не удалось загрузить файл или сборку 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' или одну из его зависимостей. Система не может найти указанный файл.


Я создал NuGet-пакет от .Net standard class library, и использовал его в другом проекте WPF (.Net Framework 4.8), и он работал нормально,

Я использовал его в новом проекте winforms (.Net Framework 4.8), и он отлично работал,

Я удалил ссылку на него .dll-файл из оригинального проекта winforms и использовал вместо него пакет nuget, но получил то же исключение..

Поэтому я предполагаю, что использование ссылки .Net Standard 2.1 сначала каким-то образом повредило проект, поэтому при попытке использовать пакет NuGet .Net Standard 2.0 я получаю исключение, несмотря на отсутствие ссылки .Чистый Стандарт 2.1

Итак, как я могу найти, где находится ссылка на .Net Standard 2.1?
и как я могу решить это исключение?

Что я уже пробовал:

1. Выгрузил проект и проверив материалы vbproj поиск .Чистый стандарт 2.1 ссылкой, не нашел..

2. от отчаяния я обыскал весь проект в поисках "2.1", надеясь найти, где находится эта ссылка, но безрезультатно.

3. Googled, вопрос не является проблемой с .Net Standard, речь идет об этой конкретной ситуации, я просто не знаю, как исследовать дальше.

4. ГИТ сброс -- жесткий фиксация перед добавлением в версии 2.1, потом добавил версию 2.0.. все то же исключение..

Sandeep Mewara

1. удалили папки bin &obj?
2. удалил старый 2.1 nuget загруженный, который мог бы сидеть в вашей системе?

Ahmad_kelany

1. Да, я сделал ... то же самое исключение.

2. 2.1 был dll-файлом, а не nuget, пакет nuget-это 2.0 с самого начала, и я удалил его .DLL-файл.

Gerry Schmitz

Попробуйте это сделать с новым "минимальным" проектом Windows Forms VS.

WPF, Windows Forms, UWP, различные фреймворки - все это "незавершенные работы", и не всегда / никогда они синхронизированы.

(И причина, по которой вы используете последнюю версию everything, заключается в том, что вам нужны эти функции, а не просто "потому что"; если вы хотите стабильности)

Ahmad_kelany

Я попробовал его с полным проектом WPF и с новым проектом Winforms, и он отлично работал в обоих случаях, как я уже говорил в вопросе,

Как я уже сказал, вероятно, проблема не в самих фреймворках, а в конкретной ситуации проекта,

И я полностью согласен с вашей последней строкой, я использовал стандарт 2.1 для определенной функции, но так как он был несовместим с фреймворком 4.8, я отказался от этой функции и вернулся к 2.0..

Мой главный вопрос заключается в том, как исследовать это исключение и что его вызывает..

Gerry Schmitz

Проблема, по-видимому, заключается в том, что вы пытаетесь использовать "пакет Nuget" (для своей библиотеки dll) вместо того, чтобы просто ссылаться на свою библиотеку dll. Казалось бы, вам нужно посмотреть на подобные пакеты Nuget и выяснить, почему ваш не работает.

Ahmad_kelany

Сэр,

В третьей строке моего вопроса я сказал, что ссылаюсь на .dll-файл, созданный по стандарту 2.0, и я все еще получил исключение,

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

И.dll-файл и пакет Nuget прекрасно работают в других проектах, будь то WPF или winForms,

Так что ясно, что вопрос не в этом .dll файл или в пакете Nuget,

Как я уже сказал, в проектной ситуации есть проблема, и я пытаюсь понять, почему она дает мне это исключение, несмотря на то, что пакет ссылается на стандарт 2.0, а не на 2.1?

Обратите внимание, что исключение говорит, что оно не может найти стандарт 2.1, но внутреннее исключение говорит, что оно не может найти стандарт 2.0..
Воистину, мне кажется, что я что-то упускаю, но я все еще не знаю, что именно? или как расследовать дальше ... 😅


Gerry Schmitz

То, что вы думаете, что вы сказали, и то, что вы сказали, - это две разные вещи: "я попробовал это с полным проектом WPF и с новым проектом Winforms, и это прекрасно работало в обоих случаях"

Ваша "проблема" заключается в том, что вы намерены спасти поврежденный проект, когда вы можете просто скопировать свои компоненты в тот, который работает (как вы "сказали" выше).

Я использую библиотеку dll .NET Standard 2.0 с приложениями Core 3.0, Framework 4.7, WPF и UWP store. Без проблем. Никаких Форм Windows. Нет NuGet Для.

Florian2C

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

Вы нашли какое-нибудь решение?

Florian2C

Единственный способ, который я нашел сейчас, - это создать новый проект и импортировать в него все формы.

2 Ответов

Рейтинг:
1

Member 14988897

Вам нужно проверить таблицу совместимости для net core , net framework и net standard Framework. например, таргетинг приложений net core 3.0 имеет обратную совместимость с net framework 2.0 и ниже, поэтому, если вы включите версию пакета более 2.1 в app targeting 3.0, вы получите эту проблему

проверить совместимость можно на сайте MSN.

В такой среде совместное использование кода становится серьезной проблемой. Вам нужно понять, где доступны API, и убедиться, что общие компоненты используют только те API, которые доступны для всех .Сетевые реализации, которые вы используете


Richard Deeming

ОП уже знает, что .NET Standard 2.1 несовместим с .NET Framework 4.8; вопрос был о том, как исправить сломанные ссылки в их проекте после удаления ссылки на пакет .NET Standard 2.1.