将MVC项目作为引用添加至另一项目时遇类型歧义错误求助
这个错误的根源很明确:你拆分后的两个项目里都存在同名的XXX.MvcApplication类(就是Global.asax对应的应用程序入口类),当项目1引用项目2的DLL后,编译器无法区分该加载哪个程序集里的这个类,所以抛出了歧义错误。给你几个具体的解决步骤:
彻底移除项目2中的MvcApplication相关文件
既然项目2是被项目1引用的依赖项目,它根本不需要自己的Mvc应用程序入口。直接删掉项目2里的Global.asax和对应的Global.asax.cs(也就是XXX.MvcApplication类所在的文件)。如果项目2原本是ASP.NET MVC项目模板创建的,建议把它改成类库项目:右键项目2→属性→应用程序→输出类型选择“类库”,这样能从根源上避免这类Mvc项目特有的冲突。显式指定项目1中MvcApplication的程序集(可选,如果你暂时不想改项目2类型)
如果暂时没法修改项目2的结构,你可以在项目1的Global.asax文件里明确指定要使用的程序集。把第一行的代码从:<%@ Application Codebehind="Global.asax.cs" Inherits="XXX.MvcApplication" Language="C#" %>修改成:
<%@ Application Codebehind="Global.asax.cs" Inherits="XXX.MvcApplication, project1" Language="C#" %>这里的
project1要替换成你项目1的程序集名称(可以在项目1的属性→应用程序→程序集名称里查看),这样编译器就知道要加载项目1自身程序集里的MvcApplication类了。清理并重建项目
做完上面的操作后,记得手动删除两个项目的bin和obj文件夹(避免残留旧的编译文件),然后先重建项目2,再重建项目1,确保所有修改都生效。检查其他同名类
顺便排查一下两个项目里有没有其他同名的自定义类(比如基控制器、过滤器、工具类等),这类同名类也可能导致类似的歧义错误,提前处理掉能避免后续踩坑。
内容的提问来源于stack exchange,提问作者Hana P

