我刚刚拿了一个 VS 2015 项目,并用 VS 2017 编译并部署到 Lambda。
这是结果:
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)
嗨@genifycom ,你能分享你项目的csproj文件吗?
当我从 VS2017 部署时,我从 AddMvc() 得到同样的错误。
你能为你的项目提供 csproj 文件吗?
我也许可以制作一个我可以分享的复制品,对分享方法的偏好?
包含可重现代码的 GitHub 存储库会很好。 那里的无关代码越少,我们就越容易识别问题。
我刚刚在 mac 上使用 yeoman 生成了它。 然后使用dotnet migrate
将项目转换为 csproj。 当它被发布和调用时,我得到以下异常:
{
"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"
]
}
}
}
}
感谢您复制@KraigM
目前这对我来说是一个阻塞问题。
我的解决方案:打开 csproj 文件并将 PreserveCompilationContext 设置为 false。
<PreserveCompilationContext>false</PreserveCompilationContext>
进一步说明:
VS 2017 项目将 PreserveCompilationContext 设置为 true。 这意味着,当您发布/部署时,VS 会发出一个“ref”文件夹,其中包含许多与根发布文件夹相同的程序集。 我怀疑某些东西正在递归扫描所有程序集并将其搞砸,但我完全不确定。 到目前为止我所知道的是我更改了该设置并且它现在可以工作了,并且我想我会分享它以查看它是否对其他人有帮助。
@DohMoose也解除了我的封锁。 这似乎是 dotnet core migrate 中的一个问题,没有将编译上下文 false 添加到项目文件中?
@DohMoose 太棒了,这也为我解决了这个问题。 谢谢你。
对于上下文,我从 VS2015 部署切换到 VS2017 并在启动时遇到该错误。
最有用的评论
我的解决方案:打开 csproj 文件并将 PreserveCompilationContext 设置为 false。
<PreserveCompilationContext>false</PreserveCompilationContext>
进一步说明:
VS 2017 项目将 PreserveCompilationContext 设置为 true。 这意味着,当您发布/部署时,VS 会发出一个“ref”文件夹,其中包含许多与根发布文件夹相同的程序集。 我怀疑某些东西正在递归扫描所有程序集并将其搞砸,但我完全不确定。 到目前为止我所知道的是我更改了该设置并且它现在可以工作了,并且我想我会分享它以查看它是否对其他人有帮助。