我目前有两个不相关的MVC3项目托管在线。

一个工作正常,另一个不工作,给我一个错误:

发现了与名为“Home”的控制器匹配的多种类型。这 如果服务此请求的路由会发生什么 ('{controller}/{action}/{id}')不指定要搜索的名称空间 与请求匹配的控制器。 如果是这样的话, 通过调用'MapRoute'方法的重载来注册这个路由 它接受一个“namespaces”参数。

我的主机的工作方式是,他给我FTP访问权限,在这个文件夹中,我有另外两个文件夹,一个用于我的应用程序。

ftpFolderA2 - foo。com ftpFolderA2 / bar。com

foo.com工作正常,我发布我的应用程序到我的本地文件系统,然后FTP内容,它工作。

当我上传并尝试运行bar.com时,上面的问题触发并阻止我使用我的网站。同时,foo.com还在运作。

是bar.com搜索从ftpFolderA2内部的控制器,这就是为什么它正在寻找另一个HomeController?我怎么能告诉它只看在控制器文件夹,因为它应该?

事实:

不使用区域。这是两个完全不相关的项目。我将每个已发布的项目放入各自的文件夹中。没有什么幻想。 每个项目只有1个HomeController。

有人能确认是这个问题吗?


当前回答

我们发现,当构建中出现冲突时,我们得到了这个错误,该冲突显示为警告。

直到我们将Visual Studio ->工具->选项->项目和解决方案->构建和运行-> MSBuild项目构建输出详细信息增加到详细信息,我们才得到详细信息。

我们的项目是一个。net v4的web应用程序,System.Net.Http (v2.0.0.0)和System.Net.Http (v4.0.0.0)之间存在冲突。我们的项目从包中引用了该文件的v2版本(使用nuget包含)。当我们删除引用并向v4版本添加引用时,构建工作正常(没有警告),错误也得到了修复。

其他回答

别人说的是对的,但对于那些仍然面临同样问题的人来说: 在我的情况下,它发生了,因为我复制了另一个项目n重命名为其他东西,但以前的输出文件在bin文件夹仍然存在…不幸的是,在重命名项目和它的命名空间后,点击Build -> Clean Solution不会删除它们…所以手动删除它们解决了我的问题!

如果你想自动解决它..您可以使用应用程序集 只需添加以下代码:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            namespaces: new[] { string.Format("{0}.Controllers", BuildManager.GetGlobalAsaxType().BaseType.Assembly.GetName().Name) }
        );

在你的项目bin/文件夹中

确保只有PROJECT_PACKAGENAME.DLL

并删除另一个other_project_packagename . dll

它可能出现在这里,或者您只是重命名了项目

有时在单个应用程序中也会出现此问题。在这种情况下,在发布应用程序时选择这些复选框

我只是删除文件夹'Bin'从服务器和复制我的Bin到服务器,我的问题解决了。