2

我正在尝试在 os x 上运行 aspnet 5 的示例: git clone https://github.com/shirhatti/Home.git

当我构建项目 HelloMvc -- 'kpm build' -- 没关系。然后我使用“k kestrel”运行应用程序并看到以下错误:

程序集 data-0x7feb6aa02a00 中缺少方法 Microsoft.Framework.Runtime.ILibraryInformation::get_LoadableAssemblies(),在程序集 /Users/minya/.kpm/packages/Microsoft.AspNet.Mvc.Core/6.0.0-beta2-11905/lib 中引用/aspnet50/Microsoft.AspNet.Mvc.Core.dll System.MissingMethodException:找不到方法:“Microsoft.Framework.Runtime.ILibraryInformation.get_LoadableAssemblies”。在 System.Linq.Enumerable+c__Iterator12 2[Microsoft.Framework.Runtime.ILibraryInformation,System.Reflection.AssemblyName].MoveNext () [0x00000] in <filename unknown>:0 at System.Linq.Enumerable+<CreateSelectIterator>c__Iterator102[System.Reflection.AssemblyName,System.Reflection.Assembly].MoveNext () [0x00000] 在:0 在 System.Linq.Enumerable+c__Iterator12 2[System.Reflection.Assembly,System.Reflection.TypeInfo].MoveNext () [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.ControllerActionDescriptorProvider.BuildModel () [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.ControllerActionDescriptorProvider.GetDescriptors () [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.ControllerActionDescriptorProvider.Invoke (Microsoft.AspNet.Mvc.ActionDescriptorProviderContext context, System.Action callNext) [0x00000] in <filename unknown>:0 at Microsoft.Framework.DependencyInjection.NestedProviders.NestedProviderManager1+CallNext[Microsoft.AspNet.Mvc. ActionDescriptorProviderContext].CallNextProvider () [0x00000] in :0 at Microsoft.Framework.DependencyInjection.NestedProviders.NestedProviderManager1[Microsoft.AspNet.Mvc.ActionDescriptorProviderContext].Invoke (Microsoft.AspNet.Mvc.ActionDescriptorProviderContext context) [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.DefaultActionDescriptorsCollectionProvider.GetCollection () [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.DefaultActionDescriptorsCollectionProvider.get_ActionDescriptors () [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.Routing.AttributeRouting.GetActionDescriptors (IServiceProvider services) [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Mvc.Routing.AttributeRouting.CreateAttributeMegaRoute (IRouter target, IServiceProvider services) [0x00000] in <filename unknown>:0 at Microsoft.AspNet.Builder.BuilderExtensions.UseMvc (IApplicationBuilder app, System.Action1 configureRoutes) [0x00000] in :0 at Microsoft.AspNet.Builder.BuilderExtensions.UseMvc (IApplicationBuilder app) [0x00000] in :0 at KWebStartup.Startup.Configure (IApplicationBuilder app) [0x00000] in :0 at (wrapper managed- to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 在 System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder活页夹,System.Object[] 参数,System.Globalization.CultureInfo 文化)[0x00000] 在:0

谷歌没有确切的问题。我试图重新安装 kvm,删除并签出 NuGet 部门。

更新:当我尝试通过“k web”运行同一个项目时,Windows 上的类似行为:

System.MissingMethodException:找不到方法:'System.Collections.Generic.IEnumerable 2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.WhereEnumerableIterator 1.CallNext.CallNextProvider() at Microsoft.Framework.DependencyInjection.NestedProviders.NestedProviderManager 1 configureRoutes) 在 Microsoft.AspNet.Builder.BuilderExtensions.UseMvc(IApplicationBuilder 应用程序) 在 HelloMvc.Startup.Configure(IApplicationBuilder 应用程序) 在 C:\prj\Home\samples\HelloMvc\Startup。 CS:第 18 行 1<System.Reflection.AssemblyName> Microsoft.Framework.Runtime.ILibraryInformation.g et_LoadableAssemblies()'.
at Microsoft.AspNet.Mvc.DefaultAssemblyProvider.<>c__DisplayClass0.<get_CandidateAssemblies>b__1(ILibraryInformation l)
at System.Linq.Enumerable.<SelectManyIterator>d__14

2.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__14

1.MoveNext()
at Microsoft.AspNet.Mvc.ControllerActionDescriptorProvider.BuildModel()
at Microsoft.AspNet.Mvc.ControllerActionDescriptorProvider.GetDescriptors()
at Microsoft.AspNet.Mvc.ControllerActionDescriptorProvider.Invoke(ActionDescriptorProviderContext context, Action callNext)
at Microsoft.Framework.DependencyInjection.NestedProviders.NestedProviderManager

1.Invoke(T context)
at Microsoft.AspNet.Mvc.DefaultActionDescriptorsCollectionProvider.GetCollection()
at Microsoft.AspNet.Mvc.DefaultActionDescriptorsCollectionProvider.get_ActionDescriptors()
at Microsoft.AspNet.Mvc.Routing.AttributeRouting.GetActionDescriptors(IServiceProvider services)
at Microsoft.AspNet.Mvc.Routing.AttributeRouting.CreateAttributeMegaRoute(IRouter target, IServiceProvider services)
at Microsoft.AspNet.Builder.BuilderExtensions.UseMvc(IApplicationBuilder app, Action


似乎问题出在 Microsoft.AspNet.Mvc.* 程序集中引用的一个(或多个)中。这是来自 Microsoft.AspNet.Mvc.Core 的 DefaultAssemblyProvider 的反汇编。我猜问题出在 ILibraryManager 的实现 GetReferenceLibraries() 方法中。但我找不到这个实现。

public class DefaultAssemblyProvider : IAssemblyProvider
{
    private static readonly HashSet<string> _mvcAssemblyList;
    private readonly ILibraryManager _libraryManager;

    public IEnumerable<Assembly> CandidateAssemblies
    {
        get
        {
            return Enumerable.Select<AssemblyName, Assembly>(Enumerable.SelectMany<ILibraryInformation, AssemblyName>(this.GetCandidateLibraries(), DefaultAssemblyProvider.\u003C\u003Ec__DisplayClass0.CS\u0024\u003C\u003E9__CachedAnonymousMethodDelegate2 ?? (DefaultAssemblyProvider.\u003C\u003Ec__DisplayClass0.CS\u0024\u003C\u003E9__CachedAnonymousMethodDelegate2 = new Func<ILibraryInformation, IEnumerable<AssemblyName>>(DefaultAssemblyProvider.\u003C\u003Ec__DisplayClass0.CS\u0024\u003C\u003E9__inst.\u003Cget_CandidateAssemblies\u003Eb__1))), new Func<AssemblyName, Assembly>(DefaultAssemblyProvider.Load));
        }
    }

    static DefaultAssemblyProvider()
    {
        HashSet<string> hashSet = new HashSet<string>((IEqualityComparer<string>) StringComparer.Ordinal);
        string str1 = "Microsoft.AspNet.Mvc";
        hashSet.Add(str1);
        string str2 = "Microsoft.AspNet.Mvc.Core";
        hashSet.Add(str2);
        string str3 = "Microsoft.AspNet.Mvc.ModelBinding";
        hashSet.Add(str3);
        string str4 = "Microsoft.AspNet.Mvc.Razor";
        hashSet.Add(str4);
        string str5 = "Microsoft.AspNet.Mvc.Razor.Host";
        hashSet.Add(str5);
        string str6 = "Microsoft.AspNet.Mvc.Rendering";
        hashSet.Add(str6);
        DefaultAssemblyProvider._mvcAssemblyList = hashSet;
    }

    public DefaultAssemblyProvider(ILibraryManager libraryManager)
    {
        this._libraryManager = libraryManager;
    }

    internal IEnumerable<ILibraryInformation> GetCandidateLibraries()
    {
        return Enumerable.Where<ILibraryInformation>(Enumerable.Distinct<ILibraryInformation>(Enumerable.SelectMany<string, ILibraryInformation>((IEnumerable<string>) DefaultAssemblyProvider._mvcAssemblyList, new Func<string, IEnumerable<ILibraryInformation>>(this._libraryManager.GetReferencingLibraries))), new Func<ILibraryInformation, bool>(DefaultAssemblyProvider.IsCandidateLibrary));
    }

    private static Assembly Load(AssemblyName assemblyName)
    {
        return Assembly.Load(assemblyName);
    }

    private static bool IsCandidateLibrary(ILibraryInformation library)
    {
        return !DefaultAssemblyProvider._mvcAssemblyList.Contains(library.get_Name());
    }
}
4

2 回答 2

1

我在 Windows 上遇到了类似的问题,发现错误的 KRE 处于活动状态。

执行kvm list显示 KRE 列表。就我而言,该1.0.0-alpha4版本处于活动状态,而不是更新的 beta 版本。

切换到默认设置并kvm use default为我整理好。

于 2014-11-19T11:29:00.437 回答
0

我能够通过更新我的 KVM 版本来解决此错误,可能有一种更简单的方法,但是假设您最初使用自制软件安装,运行这些命令应该可以解决您的问题

  • brew untap aspnet/k
  • 酿造水龙头 aspnet/k
  • 冲泡安装kvm

那么你应该可以运行 k kestrel

如果您收到一条消息说 kvm 已安装,则:

  • 酿造链接——覆盖单声道
  • brew卸载单声道
  • brew重新安装kvm
于 2014-11-15T10:53:48.630 回答