#c# #.net #.net-standard-2.0 #.net-4.7.2
#c# #.net #.net-standard-2.0 #.net-4.7.2
Вопрос:
Проект A — это консольное приложение Windows, которое использует .NET Standard 2.0 (для совместимости) и имеет следующую строку кода
public List<string> GetListOfSerialPorts()
{
return System.IO.Ports.SerialPort.GetPortNames().Distinct().ToList();
}
Локальные модульные тесты успешно запускают этот код.Это означает, что при вызове из локального модульного теста он работает.
Теперь у меня есть проект B (в том же решении), который представляет собой графический интерфейс Windows на основе .NET 4.7.2. . Этому проекту не требуется такая большая совместимость. Этот проект «использует» (ссылается) на проект A. Вызывается та же функция, но из проекта B, и когда вызывается та же самая строка кода, я вижу исключение:
«System.IO.Ports в настоящее время поддерживается только в Windows.»).
Помогите?? Какие-либо подсказки?
В качестве примечания, если я попытаюсь реализовать SerialPort.GetPortNames () в проекте B, Visual Studio жалуется, что не может ссылаться на сборку System.IO.Ports, но когда я добавляю ее в качестве ссылки на проект, он жалуется, что теперь есть две (неоднозначные) ссылки на System.IO.Ports..IO.Ports (по-видимому, он уже находится в «Системе»). Обратите внимание, что это не моя главная проблема. Моя главная проблема заключается в том, что моя исходная строка кода в проекте A теперь завершается ошибкой при вызове из проекта B.
Обратите внимание, что у нас есть Microsoft.Windows.Установлена совместимость 3.1.1.
Комментарии:
1. Самым простым решением будет обновление проекта winforms до .Net 4.8.
2. По вашему предложению я нацелился на 4.8. Перезагрузился для хорошей оценки. То же исключение. Для ясности, проект B теперь 4.8 и вызывает «GetListOfSerialPorts ()» в проекте A, который нацелен на .NET Standard 2.0.
3. Я нашел это: github.com/dotnet/runtime/issues/31045 — У вас есть какой-нибудь шанс использовать стандарт 2.1? кажется, они исправили это в этой версии.
4. Теперь смеюсь вслух… Я действительно видел этот пост, но я не видел его актуальности. По вашему предложению я попытался настроить таргетинг на 2.1. Теперь я получаю ошибку компиляции: «xxxx.csproj нацелен на netstandard2.1. На него не может ссылаться проект, предназначенный для .NetFramework, Versionc4.7.2 «.
Ответ №1:
Я решил свою проблему, установив зависимость совместимости Microsoft Windows от Project B, и это сработало. У меня сложилось впечатление, что это было необходимо только для проекта .NET Core.