Интеграция и модульные тесты больше не работают на ASP.NET Core 2.1, который не может найти сборки во время выполнения - PullRequest
0 голосов
/ 18 мая 2018

При создании тестовых проектов или обновлении приложения и тестов до ASP.NET Core 2.1 / .NET Core 2.1, выполнение тестов завершается неудачно с исключениями загрузки сборки, такими как

System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'Microsoft.AspNetCore, версия = 2.1.0.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60'. Система не может найти указанный файл.

При добавлении ссылок на некоторые другие библиотеки также появляются предупреждения о сборке, такие как

предупреждение MSB3277: Обнаружены конфликты между различными версиями «Microsoft.Extensions.Options», которые не удалось разрешить.
предупреждение MSB3277: Обнаружены конфликты между различными версиями «Microsoft.Extensions.Configuration.Abstractions», которые не удалось разрешить.
предупреждение MSB3277: Обнаружены конфликты между различными версиями «Microsoft.AspNetCore.Hosting.Abstractions», которые не удалось разрешить.
предупреждение MSB3277: Обнаружены конфликты между различными версиями «Microsoft.Extensions.DependencyInjection.Abstractions», которые не удалось разрешить.
предупреждение MSB3277: Обнаружены конфликты между различными версиями «Microsoft.AspNetCore.Http.Abstractions», которые не удалось устранить.
предупреждение MSB3277: Обнаружены конфликты между различными версиями «Microsoft.AspNetCore.Http.Features», которые не удалось разрешить.

Как заставить тестовые проекты работать для тестирования приложений ASP.NET Core 2.1?

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

У меня была такая же проблема.Добавьте это в тестовый проект, решив проблему

 <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.1"/>
0 голосов
/ 09 мая 2019

Вопрос касается ASP.NET Core 2.1, но для тех, кто сталкивается с той же проблемой с ASP.NET Core 2.2 , достаточно добавить в файл тестового проекта следующее:

<PackageReference Include="Microsoft.AspNetCore.App" />

больше не нужно для установки Sdk="Microsoft.NET.Sdk.Web", и вам следует не добавить версию к указанной выше ссылке на пакет - что вызывает предупреждение.

0 голосов
/ 18 мая 2018

Обновление : это стало проще с 2.2 Tooling .Убедитесь, что ваша dotnet --version версия SDK имеет как минимум 2.2.100, даже при создании приложений 2.1

Просто добавьте ссылку на пакет без версии в ваш проект, сохраняя Microsoft.NET.Sdk:

    <Project Sdk="Microsoft.NET.Sdk">

      <PropertyGroup>
        <TargetFramework>netcoreapp2.1</TargetFramework>
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.1" />
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <!-- other references to xunit, test SDK etc. -->
      </ItemGroup>

      <ItemGroup>
        <ProjectReference Include="..\AspNetCoreAppToTest\AspNetCoreAppToTest.csproj" />
      </ItemGroup>

    </Project>

Оригинал:

ASP.NET Core 2.1 использует новую «общую инфраструктуру» для запуска приложений ASP.NET Core.Тестовые проекты необходимо изменить / обновить, чтобы использовать эту общую платформу, используя один из следующих подходов:

  1. Измените тег <Project> тестового проекта в первой строке, чтобы использовать веб-SDK(Microsoft.NET.Sdk.Web вместо Microsoft.NET.Sdk) и добавьте ссылку на пакет к Microsoft.AspNetCore.App (или .All, если вы используете его внутри веб-проекта) без указания версии

    Файл проекта (.csproj) тестового проекта теперь должен выглядеть следующим образом:

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>netcoreapp2.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.1" />
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <!-- other references to xunit, test SDK etc. -->
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\AspNetCoreAppToTest\AspNetCoreAppToTest.csproj" />
      </ItemGroup>
    
    </Project>
    
  2. Альтернатива: Оставьте Sdk как есть и добавьте PackageReference кпакет общего каркаса, но укажите версию.

    Это можно сделать, просто добавив ссылку NuGet на Microsoft.AspNetCore.App.Однако это может вызвать проблемы, поскольку SDK может решить обновить ссылку, когда будет выпущен новый выпуск исправлений для ядра ASP.NET, и обновлены инструменты, чтобы отразить это.Вам нужно будет обновить ссылку на NuGet для каждого выпуска патча.

...