Aws-lambda-dotnet: Die Bereitstellung mit Visual Studio 2017 schlägt fehl

Erstellt am 3. Apr. 2017  ·  10Kommentare  ·  Quelle: aws/aws-lambda-dotnet

Ich habe gerade ein VS 2015-Projekt genommen und mit VS 2017 kompiliert und in Lambda bereitgestellt.

Das ist das Ergebnis:

at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
Exception has been thrown by the target of an invocation.: TargetInvocationException
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.AspNetCore.Hosting.Internal.ConfigureServicesBuilder.Invoke(Object instance, IServiceCollection exportServices)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction..ctor()
The given key was not present in the dictionary.: KeyNotFoundException
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.<GetCandidates>d__4.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__157`2.MoveNext()
at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services)
guidance

Hilfreichster Kommentar

Meine Lösung: Öffnen Sie die csproj-Datei und setzen Sie PreserveCompilationContext auf false.
<PreserveCompilationContext>false</PreserveCompilationContext>

Weitere Erklärung:
Die VS 2017-Projekte setzen PreserveCompilationContext auf true. Dies bedeutet, dass VS beim Veröffentlichen/Bereitstellen einen "Ref"-Ordner mit vielen der gleichen Assemblys wie der Stammveröffentlichungsordner ausgibt. Ich vermute, dass etwas alle Baugruppen rekursiv scannt und das vermasselt, aber ich bin mir überhaupt nicht sicher. Alles, was ich bisher weiß, ist, dass ich diese Einstellung geändert habe und sie jetzt funktioniert, und dachte, ich würde dies teilen, um zu sehen, ob es anderen hilft.

Alle 10 Kommentare

Hallo @genifycom , könnten Sie die csproj-Datei für Ihr Projekt freigeben?

Ich erhalte denselben Fehler von AddMvc(), wenn ich von VS2017 aus bereite.

Können Sie die csproj-Datei für Ihr Projekt bereitstellen?

Ich könnte vielleicht eine Repro erstellen, die ich teilen könnte, Präferenz für die Freigabemethode?

Ein GitHub-Repository mit dem reproduzierbaren Code wäre gut. Je weniger überflüssiger Code darin enthalten ist, desto einfacher ist es für uns, das Problem zu identifizieren.

Ich habe es gerade mit Yeoman auf dem Mac generiert. Konvertierte dann das Projekt mit dotnet migrate in csproj. Wenn es veröffentlicht und aufgerufen wird, erhalte ich die folgende Ausnahme:

{
  "errorType": "LambdaException",
  "errorMessage": "An exception was thrown when the constructor for type 'PreviewAspNetCoreWebAPI.LambdaEntryPoint' was invoked. Check inner exception for more details.",
  "cause": {
    "errorType": "TargetInvocationException",
    "errorMessage": "Exception has been thrown by the target of an invocation.",
    "stackTrace": [
      "at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)",
      "at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)",
      "at System.Activator.CreateInstance(Type type, Boolean nonPublic)",
      "at System.Activator.CreateInstance(Type type)"
    ],
    "cause": {
      "errorType": "TargetInvocationException",
      "errorMessage": "Exception has been thrown by the target of an invocation.",
      "stackTrace": [
        "at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)",
        "at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)",
        "at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)",
        "at Microsoft.AspNetCore.Hosting.Internal.ConfigureServicesBuilder.Invoke(Object instance, IServiceCollection exportServices)",
        "at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()",
        "at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()",
        "at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()",
        "at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction..ctor()"
      ],
      "cause": {
        "errorType": "KeyNotFoundException",
        "errorMessage": "The given key was not present in the dictionary.",
        "stackTrace": [
          "at System.Collections.Generic.Dictionary`2.get_Item(TKey key)",
          "at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)",
          "at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)",
          "at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)",
          "at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)",
          "at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.<GetCandidates>d__4.MoveNext()",
          "at System.Linq.Enumerable.<SelectManyIterator>d__157`2.MoveNext()",
          "at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()",
          "at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)",
          "at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)",
          "at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services)",
          "at PreviewAspNetCoreWebAPI.Startup.ConfigureServices(IServiceCollection services) in /PreviewAspNetCoreWebAPI/src/PreviewAspNetCoreWebAPI/Startup.cs:line 34"
        ]
      }
    }
  }
}

Danke für die Reproduktion von @KraigM

Dies ist derzeit ein Blockierungsproblem für mich.

Meine Lösung: Öffnen Sie die csproj-Datei und setzen Sie PreserveCompilationContext auf false.
<PreserveCompilationContext>false</PreserveCompilationContext>

Weitere Erklärung:
Die VS 2017-Projekte setzen PreserveCompilationContext auf true. Dies bedeutet, dass VS beim Veröffentlichen/Bereitstellen einen "Ref"-Ordner mit vielen der gleichen Assemblys wie der Stammveröffentlichungsordner ausgibt. Ich vermute, dass etwas alle Baugruppen rekursiv scannt und das vermasselt, aber ich bin mir überhaupt nicht sicher. Alles, was ich bisher weiß, ist, dass ich diese Einstellung geändert habe und sie jetzt funktioniert, und dachte, ich würde dies teilen, um zu sehen, ob es anderen hilft.

@DohMoose , der mich auch

@DohMoose Super , das hat das Problem auch für mich gelöst. Dankeschön.

Aus Gründen des Kontexts habe ich von einer VS2015-Bereitstellung zu einer VS2017-Bereitstellung gewechselt und diesen Fehler beim Start erhalten.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen