C# 错误:用户代码未处理System.Reflection.TargetParameterCountException

C# 错误:用户代码未处理System.Reflection.TargetParameterCountException,c#,C#,代码如下所示: public static class ResLocator { public static string Resolve(Type assemblyObjectType, string resourceName) { MethodInfo resourceLocatorMethod = typeof(System.Web.Handlers.AssemblyResourceLoader).GetMethod( "Ge

代码如下所示:

public static class ResLocator
{
    public static string Resolve(Type assemblyObjectType, string resourceName)
    {
        MethodInfo resourceLocatorMethod = typeof(System.Web.Handlers.AssemblyResourceLoader).GetMethod(
                "GetWebResourceUrlInternal", BindingFlags.Static | BindingFlags.NonPublic, null,
                CallingConventions.Any, new[] { typeof(Assembly), typeof(string), typeof(bool), typeof(bool), typeof(ScriptManager) }, null);

        string url = string.Format("/{0}", resourceLocatorMethod.Invoke(
            null,
            new object[] { Assembly.GetAssembly(assemblyObjectType), resourceName, false })
        );

        return url;
    }
}
错误:System.Reflection.TargetParameterCountException未由用户代码处理,在调用时出现


我不确定我的代码出了什么问题。

这里,您正在为要查找的方法指定参数类型:

new[] { typeof(Assembly), typeof(string), typeof(bool), typeof(bool), typeof(ScriptManager) }

在这里,您将指定与这些参数对应的参数值:

new object[] { Assembly.GetAssembly(assemblyObjectType), resourceName, false })
您提供了3个参数,但有5个参数。那是行不通的。在调用方面,异常甚至会告诉您做错了什么

更重要的是,像这样调用内部方法是一个非常糟糕的主意。当然,它现在已经存在了,但是它可以在库的未来版本中很容易地进行更改,在这个时候,即使代码现在正常工作,代码也会崩溃。如果图书馆的作者想让你给它打电话,他们会把它公之于众的


反射很重要,有很多有效的用途,特别是在测试您自己的代码时,但是使用它来有效地尝试调用您不应该访问的其他库中的代码不是一个好主意。

这里,您要为您正在寻找的方法指定参数的类型:

new[] { typeof(Assembly), typeof(string), typeof(bool), typeof(bool), typeof(ScriptManager) }

在这里,您将指定与这些参数对应的参数值:

new object[] { Assembly.GetAssembly(assemblyObjectType), resourceName, false })
您提供了3个参数,但有5个参数。那是行不通的。在调用方面,异常甚至会告诉您做错了什么

更重要的是,像这样调用内部方法是一个非常糟糕的主意。当然,这已经存在了——但是它可以在库的未来版本中轻松地更改,在这个时候,即使代码现在可以工作,代码也会中断。如果图书馆的作者想让你给它打电话,他们会把它公之于众的


反射很重要,有很多有效的用途,特别是在测试您自己的代码时,但是使用它来有效地尝试调用您不应该访问的其他库中的代码不是一个好主意。

除了依赖于内部实现细节这一事实之外?听起来你调用这个方法的参数数目不对。该方法在哪里声明?(如中所示,您是否有到源代码的链接?)可能,@JonSkeet.Well这会解释错误,因为OP提供了3个参数,该方法有5个参数。除了依赖于内部实现细节这一事实之外?听起来你调用这个方法的参数数目不对。该方法在哪里声明?(如中所示,您是否有到源代码的链接?)可能,@JonSkeet.Well这会解释错误,因为OP提供了3个参数,该方法有5个参数。可以,但我看不到从MVC应用程序的外部程序集中访问嵌入JavaScript文件的其他方法。@tesicg:如果它嵌入到程序集中,为什么不直接使用
Assembly.GetManifestResourceStream
?这里有一个例子:@tesicg:仅仅因为有人在做这件事并不意味着这是一个好主意:)我对你要做的事情或ASP.NET知道得不够多,我自己也无法给出太多建议,但如果这真的是最好的方法,我会感到惊讶。没关系,但在MVC应用程序中,我看不到从外部程序集中访问嵌入JavaScript文件的其他方法。@tesicg:如果它嵌入到程序集中,为什么不直接使用
Assembly.GetManifestResourceStream
?这里有一个例子:@tesicg:仅仅因为有人在做这件事并不意味着这是一个好主意:)我对你要做的事情(或ASP.NET)了解得不够,我自己也无法给出太多建议,但如果这真的是最好的方法,我会感到惊讶。