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?
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:
Ä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>
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.
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.