wake-up-neo.com

Integration und Komponententests funktionieren in ASP.NET Core 2.1 nicht mehr und können zur Laufzeit keine Assemblys finden

Wenn Sie Testprojekte erstellen oder eine Anwendung und Tests auf ASP.NET Core 2.1/.NET Core 2.1 aktualisieren, schlägt die Ausführung von Tests mit Assembly-Ladeausnahmen wie fehl

System.IO.FileNotFoundException: Datei oder Assembly 'Microsoft.AspNetCore, Version = 2.1.0.0, Culture = neutral, PublicKeyToken = adb9793829ddae60' konnte nicht geladen werden. Die angegebene Datei wurde vom System nicht gefunden.

Wenn Sie Verweise auf andere Bibliotheken hinzufügen, werden auch Build-Warnungen wie angezeigt

warning MSB3277: Es wurden Konflikte zwischen verschiedenen Versionen von "Microsoft.Extensions.Options" gefunden, die nicht behoben werden konnten.
Warnung MSB3277: Es wurden Konflikte zwischen verschiedenen Versionen von "Microsoft.Extensions.Configuration.Abstractions" gefunden, die nicht behoben werden konnten.
Warnung MSB3277: Es wurden Konflikte zwischen verschiedenen Versionen von "Microsoft.AspNetCore.Hosting.Abstractions" gefunden, die nicht behoben werden konnten.
Warnung MSB3277: Es wurden Konflikte zwischen verschiedenen Versionen von "Microsoft.Extensions.DependencyInjection.Abstractions" gefunden, die nicht behoben werden konnten.
Warnung MSB3277: Es wurden Konflikte zwischen verschiedenen Versionen von "Microsoft.AspNetCore.Http.Abstractions" gefunden, die nicht behoben werden konnten.
Warnung MSB3277: Es wurden Konflikte zwischen verschiedenen Versionen von "Microsoft.AspNetCore.Http.Features" gefunden, die nicht behoben werden konnten.

Wie kann ich Testprojekte zum Testen von ASP.NET Core 2.1-Anwendungen verwenden?

39
Martin Ullrich

pdate: Dies wurde mit 2.2 Tooling vereinfacht. Stellen Sie sicher, dass Ihre SDK-Version dotnet --version Mindestens 2.2.100 Lautet auch bei der Erstellung von 2.1-Anwendungen

Fügen Sie einfach eine versionslose Paketreferenz zu Ihrem Projekt hinzu, während Sie den Microsoft.NET.Sdk Behalten:

    <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>

Original:

ASP.NET Core 2.1 verwendet ein neues "freigegebenes Framework", um ASP.NET Core-Anwendungen auszuführen. Testprojekte müssen geändert/aktualisiert werden, um auch dieses gemeinsame Framework mit einem der folgenden Ansätze zu verwenden:

  1. Ändern Sie das <Project> - Tag des Testprojekts in der ersten Zeile, um das Web-SDK (Microsoft.NET.Sdk.Web Anstelle von Microsoft.NET.Sdk) Zu verwenden, und fügen Sie einen Paketverweis auf Microsoft.AspNetCore.App (Oder) hinzu .All, Wenn Sie das im Webprojekt verwenden) ohne Angabe einer Version

    Die Projektdatei (.csproj) des Testprojekts sollte nun so aussehen:

    <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. Alternative: Lassen Sie Sdk unverändert und fügen Sie dem gemeinsam genutzten Framework-Paket ein PackageReference hinzu, geben Sie jedoch eine Version an.

    Dazu fügen Sie einfach einen NuGet-Verweis auf Microsoft.AspNetCore.App Hinzu. Dies kann jedoch zu Problemen führen, da das SDK möglicherweise die Referenz aktualisiert, wenn eine neue Patch-Version von ASP.NET Core veröffentlicht und das Tool entsprechend aktualisiert wird. Sie müssen die NuGet-Referenz für jede Patch-Version aktualisieren.

66
Martin Ullrich

Die Frage gibt ASP.NET Core 2.1 an, aber für diejenigen, die auf dasselbe Problem mit ASP.NET Core 2.2 stoßen, ist es ausreichend, Ihrem Test Folgendes hinzuzufügen Projektdatei:

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

Es gibt keine Notwendigkeit um Sdk="Microsoft.NET.Sdk.Web" nicht mehr und Sie sollten nicht der obigen Paketreferenz eine Version hinzufügen, die eine Warnung auslöst.

3
EM0