Ошибка компиляции только в коде Visual Studio - PullRequest
4 голосов
/ 09 апреля 2019

Я скачал .NET SDK for the Froala WYSIWIG HTML Editor.Ссылка для скачивания доступна здесь: https://www.froala.com/wysiwyg-editor/docs/sdks/dotnet

Просто скачайте zip, распакуйте его и откройте его.

При компиляции решения в Visual Studio 2019 у меня нет ошибок /Предупреждения.Никаких проблем во время выполнения.

При открытии точно такого же решения в коде Visual Studio, я получал некоторые ошибки при компиляции (dotnet build), даже если компиляция прошла успешно.И никаких проблем во время выполнения.

Ошибки в основном Ссылочный тип 'HttpContext' утверждает, определен 'System.Web', но не найден

Как указано здесь это может быть проблемой нацеливания на 2 разные версии .NET Framework.

Решение (.sln) составлено следующим образом:

  • src project
  • demo-core project (ссылается на проект src) <--- установлен как проект по умолчанию </li>
  • demo project (ссылается на проект src) <---- не используется, потому что я использую demo-core </li>

Мне не удалось найти решение для этого надоедливого предупреждения об ошибке при компиляции.

ОБНОВЛЕНИЕ 1

Проект src нацелен на net472;netstandard2.0

Демо-основной проект нацелен на .NET Core 2.0

ОБНОВЛЕНИЕ 2

Мне наконец удалось избавиться от ошибок компиляции.Я просто удалил net472 из целевого фреймворка src projet, и сразу же исчезли ошибки компиляции.

Что я имел к выводу?Как эта модификация влияет на код Visual Studio и почему это не нужно в Visual Studio 2019. Извините, но это странно для меня.

1 Ответ

0 голосов
/ 15 апреля 2019

Ни один из оригинальных источников, загруженных с этого сайта (а также проверенных в истории коммитов github), не ссылается на net472;вместо этого они ссылаются на net471.Я подозреваю, что решение было впервые опробовано в Visual Studio 2019, и, не имея установленного пакета таргетинга .NET SDK 4.7.1, была предпринята попытка перенастроить SDK 4.7.2.

После того, как вы это сделаете и повторнооткройте исходный код в VS Code, расширение Omnisharp пытается выполнить компиляцию для первой целевой платформы, найденной из-за слабой поддержки нескольких целевых структур .В этом случае первым найденным для проекта src является net472 (что важно).Обратите внимание, что изменение порядка целевых платформ не имеет никакого эффекта.

Ошибка «Утверждение типа ссылки« HttpContext »определено как« System.Web », но не найдено» теперь просто объяснить.Если мы посмотрим, например, на src / Image.cs, то увидим следующее с помощью операторов:

using System;
using System.IO;
using System.Collections.Generic;
#if netcore
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.StaticFiles;
#else
using System.Web;
#endif

Если проект src «скомпилирован» сервером Omnisharp с использованием net472, он импортирует System.Web.HttpContext.Демонстрационный проект в Controllers / FoalaApiController.cs, скомпилированный для netcore2.0, вместо этого ссылается на Microsoft.AspNetCore.Http.HttpContext.Они явно не совпадают.

Если бы Omnisharp выбрал правильную цель netcore2.0 для проекта src, то они бы соответствовали.Это не так, вы видите эти ошибки, сообщенные Omnisharp.Вы не видите этих ошибок из сборки dotnet или VS2019, потому что они правильно разрешают правильную целевую платформу для проекта src.


Вот что я впервые испытал, когда скачал исходный код.Не ясно, какую версию .NET Core SDK вы используете.Когда я собираю исходный код, я вижу следующую ошибку с .NET Core SDK 2.2.100.

ошибка NU1003: PackageTargetFallback и AssetTargetFallback не могут использоваться вместе.Удалите ссылки PackageTargetFallback (не рекомендуется) из среды проекта.

Исправление этой ошибки простое: удалите объявление PackageTargetFallback из файлов .csproj.После этого проект компилируется без ошибок / предупреждений, используя dotnet build.

. Первоначально я не видел никаких других ошибок в VS Code, потому что у меня тоже не было установлен пакет таргетинга .NET SDK 4.7.1.Следовательно, Omnisharp может только скомпилировать проект src, используя netstandard2.0.

...