Как создать решение с поддержкой нескольких версий в MVC - PullRequest
1 голос
/ 15 мая 2019

Я создаю один проект в последней версии Asp.net MVC 4.7.1 и хочу использовать это решение как dll библиотеки классов в других проектах.Но другие проекты, где мы используем эту dll, не поддерживают последнюю версию (4.6).Когда я пытаюсь использовать библиотеку классов в других решениях версии, она выдает ошибку ниже.

(0): ошибка CS1705: сборка «ProjectName (имя dll), версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нуль» использует System.Web.Mvc, версия = 5.2.4.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 ', версия которой выше, чем у указанной сборки' System.Web.Mvc, Версия = 5.2.3.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 '

Мне нужносоздать решение с поддержкой нескольких версий, используя его как dll.

1 Ответ

0 голосов
/ 15 мая 2019

В вашем проекте необходимо настроить таргетинг на несколько фреймворков;

  1. Щелкните правой кнопкой мыши имя проекта и выберите «Редактировать файл .cproj»
  2. .становится
<TargetFrameworks>...</TargetFrameworks>
укажите целевые рамки (см. документы для всех версий):
<TargetFrameworks>net472;net48;netcoreapp2.0;netcoreapp2.1;netcoreapp2.2</TargetFrameworks>
если в вашей библиотеке будут какие-либо ссылки, вам необходимо вручную указать все ссылки для каждой версии:
<ItemGroup Condition=" '$(TargetFramework)' == 'net471' ">
  <Reference Include="System.Net" />
</ItemGroup>

или указать ссылку для нескольких версий:

<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.0' || '$(TargetFramework)' == 'netcoreapp2.1' || '$(TargetFramework)' == 'netcoreapp2.2' ">
  <PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="1.0.0" />
</ItemGroup>

или укажите ссылку на пакет для всех целевых платформ:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Localization" Version="1.0.0" />
</ItemGroup>

вы можете указать минимальную требуемую версию, и фреймворк установит последнюю совместимую версию.Например, ниже мы указываем минимальную версию пакета локализации как 1.0.0, но когда она будет установлена ​​на .Net Core 2.2, будет установлена ​​новейшая совместимая версия, для получения более подробной информации о версиях см. диапазоны версий и символы подстановки

последнее, но не менее важное;в вашем коде вы должны проверить конкретные целевые рамки, в которых вам нужно использовать совместимую строку кода с каждой версией.

Например, чтобы получить информацию о культуре, вам нужно указать другой код для разных версий .Net Core:

#if NETCOREAPP1_0
    var culture = new CultureInfo("en-US");
#else
    var culture = CultureInfo.GetCultureInfo("en-US");
#endif

    _logger.LogInformation($"{culture.Name}");

Если вы используете Visual Studio, вы увидите раскрывающуюся навигациюдля всех целевых сред вы можете использовать его для переключения между целевыми средами и проверки совместимости кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...