Eine Ergänzung zu der Antwort, die @AndreiU bereits gegeben hat, und wie Laufzeitfehler lokal reproduziert werden.
Beim Bereitstellen in Azure, nicht lokal, wurde der folgende Laufzeitfehler angezeigt.
Datei oder Assembly 'System.Net.Http, Version = 4.2.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Das System kann die angegebene Datei nicht finden. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" at Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n at Company.Project .BackOffice.Web.Controllers.OrderController..ctor () in C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: Zeile 30 \ r \ n bei lambda_method ( Closure) \ r \ n bei System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage-Anforderung, HttpControllerDescriptor controllerDescriptor, Typ controllerType) "}} Kultur = neutral, PublicKeyToken = b03f5f7f11d50a3a 'oder eine seiner Abhängigkeiten. Das System kann die angegebene Datei nicht finden. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" at Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n at Company.Project .BackOffice.Web.Controllers.OrderController..ctor () in C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: Zeile 30 \ r \ n bei lambda_method ( Closure) \ r \ n bei System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage-Anforderung, HttpControllerDescriptor controllerDescriptor, Typ controllerType) "}} Kultur = neutral, PublicKeyToken = b03f5f7f11d50a3a 'oder eine seiner Abhängigkeiten. Das System kann die angegebene Datei nicht finden. "," ExceptionType ":" System.IO.FileNotFoundException "," StackTrace ":" at Company.Project.Service.CompanyIntegrationApiService..ctor (Uri baseAddress) \ r \ n at Company.Project .BackOffice.Web.Controllers.OrderController..ctor () in C: \ projects \ company-project \ src \ Company.Project.BackOffice.Web \ Controllers \ Order \ OrderController.cs: Zeile 30 \ r \ n bei lambda_method ( Closure) \ r \ n bei System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create (HttpRequestMessage-Anforderung, HttpControllerDescriptor controllerDescriptor, Typ controllerType) "}}
Als ich anfing, Baugruppen zu betrachten, konnte ich feststellen, dass mein Webprojekt und mein Serviceprojekt auf verschiedene Versionen abzielten System.Net.Http
.
Webprojekt:
Serviceprojekt:
Es ist leicht zu glauben, dass dies durch eine Nichtübereinstimmung in den Versionen verursacht wird, aber der Schlüssel hier ist, den Fehler zu untersuchen The system cannot find the file specified.
.
Wenn Sie sich die Pfadeigenschaft ansehen, sehen Sie, dass das Webprojekt auf eine .NET Framework-Assembly abzielt, während der Dienst auf eine Assembly aus Visual Studio 2017 abzielt. Da auf dem Server Visual Studio 2017 nicht installiert ist, tritt der Laufzeitfehler auf.
Webpfad:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Net.Http.dll
Servicepfad:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll
Etwas so einfache wie Einstellung Copy Local
zu true
dem Problem jedoch nicht in allen Fällen zu beheben.
Um den Fehler auf Ihrem lokalen Computer zu reproduzieren, entfernen Sie einfach den erforderlichen System.Net.Http.dll
aus dem Visual Studio-spezifischen Ordner. Dies gibt Ihnen den Laufzeitfehler und wahrscheinlich einige Buildfehler. Nachdem diese behoben sind, sollte alles funktionieren, zumindest für mich.
Wenn Sie installiert haben , System.Net.Http
über NuGet
Prüfung , die Montage wird durch einen Blick auf die verwendete .csproj
Version. System.Net.Http 4.3.4
gibt die folgende Baugruppe zum Beispiel:
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
Wenn Sie einen Build-Server wie Jenkins, TeamCity oder AppVeyor verwenden, ist .dll
möglicherweise auch die fehlende Laufzeit vorhanden. In diesem Fall ist es möglicherweise nicht hilfreich, die NuGet-Version von System.Net.Http zu verwenden oder die fehlenden .dll
lokal zu löschen . Um diesen Fehler zu beheben, schauen Sie sich die Version an, die nicht gefunden wurde, und die spezifische PublicKeyToken
. Erstellen Sie anschließend eine verbindliche Weiterleitung in einem Web.config
oder App.config
abhängig von Ihrem Projekt. In meinem Fall möchte ich stattdessen 4.0.0.0 verwenden:
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
Ein guter Github-Thread zu diesem Thema:
https://github.com/dotnet/corefx/issues/22781