C# VS2015问题:无法调用同项目下其他文件中的方法?
嘿,我之前也碰到过这种“明明在同一项目却调用不了”的诡异问题,尤其还是在Global.asax.cs这个特殊文件里操作,确实容易踩一些隐藏的坑。既然你已经排除了项目归属、命名空间和继承的问题,那咱们可以从这几个方向再排查一遍:
检查访问修饰符是否正确:
别小看这个基础点!如果你的目标类是private或者方法是private,那肯定调用不了。确保目标类是public或者internal(同一项目内默认的访问级别,本来是可以访问的,但有时候不小心改了也会出问题),方法如果是静态方法要加static,实例方法则需要先创建类的实例再调用。比如:// 正确的静态类+静态方法示例 public static class MyToolClass { public static void DoSomething() { // ... } } // 在Global.asax.cs里调用 MyToolClass.DoSomething();确认命名空间的引用细节:
就算在同一根命名空间下,如果目标类在子命名空间里(比如MyProject.HelpersvsMyProject),那Global.asax.cs里要么加using MyProject.Helpers;,要么用完全限定名调用MyProject.Helpers.MyToolClass.DoSomething();。有时候VS的智能提示会抽风,手动写一遍反而能发现问题。验证项目文件是否真正包含目标.cs:
有时候文件看起来在解决方案资源管理器里,但实际没被加入到项目的编译列表中。你可以右键项目→卸载项目→编辑.csproj文件,看看有没有类似这样的节点:<Compile Include="Helpers\MyToolClass.cs" />如果没有,手动添加这行代码,然后重新加载项目再编译试试。
清理编译缓存并重建解决方案:
有时候是VS的编译缓存搞的鬼。右键解决方案→清理解决方案,然后右键→生成解决方案,甚至重启一下VS,很多时候这种“灵异”问题就消失了。排查命名冲突或类的实例化问题:
如果目标类和系统类、第三方库类同名,那得用完全限定名来区分调用。另外,如果目标类不是静态类,你可不能直接用类名调用方法,得先实例化:// 实例类的调用方式 var tool = new MyToolClass(); tool.DoSomething();
内容的提问来源于stack exchange,提问作者Alyssa June

