Bac*_*tnz 31 c# asp.net methodnotfound
我有一个ASP.Net c#项目试图访问另一个项目中的类中的方法.它适用于类中的前半部分方法,但不适用于我最近添加的类中的另一半方法.他们编译,但他们在运行时抛出一个未找到异常的方法.
有没有人有我可以尝试的想法?我试过了:
.sln文件Mar*_*ell 57
"未找到方法"是一个非常具体的错误,这意味着它所期望的方法(即在编译时存在)根本就不存在.这通常意味着您正在部署的文件与您认为的文件不同 - 具体来说,我会打赌您正在部署旧版本的库(缺少您的添加).
根据您的想法检查部署到Web服务器的dll .
noz*_*zem 14
我遇到过同样的问题.在我的情况下,它是由添加可选参数引起的.所以首先你会:
referencingAssembly:
referencedAssembly.DoStuff(firstArgument, secondArgument)
Run Code Online (Sandbox Code Playgroud)
referencedAssembly:
public void DoStuff(string firstArgument, string secondArgument)
{
//stuff to do
}
Run Code Online (Sandbox Code Playgroud)
然后向方法添加可选参数,但在调用时不提供该参数.
referencingAssembly:
referencedAssembly.DoStuff(firstArgument, secondArgument)//unchanged
Run Code Online (Sandbox Code Playgroud)
referencedAssembly:
public void DoStuff(string firstArgument, string secondArgument, string thirdArgument = "default value")
{
//stuff to do
}
Run Code Online (Sandbox Code Playgroud)
在本地,这将构建并运行正常,因为新构建的referencingAssembly.dll将引用DoStuff(字符串,字符串,字符串)方法.但是当你只部署更改的referencedAssembly时(思考:添加的参数是可选的,并且referncingAssembly仍然有效),旧版本的referencingAssembly将抛出一个MethodNotFound,因为它寻找一个带有签名DoStuff(string,string)的方法,这是由于我们添加了额外(可选)参数,因此不再出现在referencedAssembly中.
可能的解决方案可能是过载:
referencedAssembly:
public void DoStuff(string firstArgument, string secondArgument)//original method
{
DoStuff(firstArgument, secondArgument, "default value")
}
public void DoStuff(string firstArgument, string secondArgument, string thirdArgument)//new overload of the method
{
//stuff to do
}
Run Code Online (Sandbox Code Playgroud)
或者部署新构建的referencingAssembly(它将引用具有签名DoStuff的方法(字符串,字符串,字符串)).
Seb*_* H. 10
有同样的问题,在我的情况下,在webconfig中将optimizeCompilations设置为false解决了问题
您的解决方案中有两个项目:项目 A 和项目 B。两个项目都使用 nuget 包“DoStuff”,但 DoStuff 包的版本不同:
1.1版本有一个新方法,在项目A中使用。当项目B使用项目A时,你会得到这个MethodNotFoundException,因为项目B的DoStuff版本不知道项目A在说什么。
为了防止这种情况,我们有一个单元测试,如果项目使用同一 nuget 包的不同版本,则该单元测试会失败。一个相对简单的门挡,在过去几年里为我们省去了一些麻烦。
我遇到过这种问题,但能够解决它.我清空了bin和debug文件夹,并尝试重新构建项目.它起作用了,至少对我而言.或者尝试清理解决方案并尝试重建它.但是,当然,发布部分代码可能会更有帮助.
我有一个非常相似的问题,发现该程序集的旧版本已安装到GAC。卸载该版本后,该项目将编译并正确运行。因此,请检查GAC(C:\Windows\Assembly)以确保未在其中列出。
| 归档时间: |
|
| 查看次数: |
64268 次 |
| 最近记录: |