Answers:
将batch =“ false”属性添加到web.config文件的“ compilation”元素。
发生此问题的原因是ASP.NET 2.0使用应用程序引用和应用程序的文件夹结构来编译应用程序的方式。如果该应用程序的web.config文件中的元素的batch属性设置为true,则ASP.NET 2.0会将应用程序中的每个文件夹编译到一个单独的程序集中。
如果将.cs文件放在App_Code中并将其生成操作更改为在Web应用程序项目中进行编译,则可能会发生这种情况。
在App_Code中将.cs文件的构建操作作为Content进行,或者将App_Code的名称更改为其他名称。我更改了名称,因为intellisense无法修复标记为内容的.cs文件。
有关更多信息,请访问http://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.html
一个可能的原因这个错误是,有哪些是在他们的同名2个aspx页面inherits=
的<@page language=......inherits=>
线。
更改inherits=
名称可以解决该错误。
作为另一个数据点,我遇到了这个问题,但没有任何证据表明Ben的答案中的链接中有循环引用。建立我的网站项目会因一些错误而失败,然后进行设置compilation batch="false"
修复,但是我不想走这条路,因为这是一个大型的生产网站。
该解决方案位于我的D:\ svn文件夹的子文件夹中,该文件夹已映射到S:。当我从S:打开解决方案时,会发生这些错误,但是如果我直接转到D:\ svn并打开解决方案,则不会出错。
我还注意到,尽管compilation batch="true"
在我的web.config中,但从映射的S:驱动器打开解决方案时,我所有的.ascx文件都被编译成它们自己的程序集。如果我从物理位置打开它,则.ascx文件将被编译到各自文件夹的程序集中(这batch="true"
应该是这样工作的)。
奇怪。
就我而言,当我编辑仍然具有重复的类名的Designer.cs文件时,该问题已解决。由于某种原因,当我将类“ logout”重命名为“ logout2”时,在设计器文件中它没有自动更改,仍然是“ logout”,并且该类名称已经存在于我的项目中的预编译dll中(该类属于与我合作并开发的第三方网络应用)。
将部分aspx页面放入单独的用户控件时出现此问题。在我的机器上,一切正常,在服务器上出现错误。
重命名了问题类和文件。
http://support.microsoft.com/kb/919284方法2:重新排序应用程序中的文件夹,以撰写可能的循环引用
这些解决方案都不适合我。我两个冲突的DLL都在C:\ ... \ AppData \ ... \临时ASP.NET文件\ ...中
问题是我在同一解决方案中将类型从一个项目移动到另一个项目之前,已将源存储库回滚到了较早的版本。
我尝试从msbuild标识的“ Temporary ASP.NET Files”位置删除较新的DLL(在旧的代码库中甚至根本没有该DLL)。msbuild只是放回去。
我还尝试了其中一些已成功使用的web.config设置,但这也不起作用。尽管在撰写本文时,我意识到在同一解决方案中实际上有两个MVC项目,并且两个项目都有错误,所以问题可能出在我没有将设置添加到这两个项目中。
我尝试将源回购向前滚动并进行清理,然后再次回滚并进行清理。没有。
我尝试删除所有“ ASP.NET临时文件”位置。msbuild将其放回原处。
最后,我尝试在Visual Studio中进行重建。尽管命令行输出和“错误”输出都给出了相同的msbuild“临时ASP.NET文件”错误,但是Intellisense错误(将鼠标悬停在冲突的类型上时)实际上抱怨输出目录中的DLL。显然“清洁”和“重建”没有完成他们的工作。我手动删除了Intellisense标识的输出目录中的DLL,问题已解决。
tl; dr-确保使用批处理设置覆盖了所有web.configs,并尝试利用Intellisense获得更多线索。
有时,它可能有助于删除解决方案并重新创建。由于从VS2005转换到vs2010时会发生这种用法,因此解决方案中仍然保留了对框架4.0的一些引用(升级后),甚至所有项目都定义为3.5。
通常,重新构建解决方案应清除这些问题。
在编译服务器上编译应用程序时,我遇到了同样的问题。
我的控制器有一个简单的静态代码,因此我更改了ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>
至
<%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>
还从代码隐藏中删除了partial关键字,并在代码隐藏中添加了名称空间。
这个:
using System;
using System.Web.UI;
/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
对此:
using System;
using System.Web.UI;
namespace Controles
{
/// <summary>
/// My controller
/// </summary>
public class controllerName : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
那对我有用。
发布我的解决方案:
该问题与Mcafee Antivirus的“按访问扫描”有关。禁用此功能可以解决问题。启用防病毒功能后,ASP无法正确使用ASP Temporary文件夹。
希望这对某人有帮助。
App_Code文件夹导致了问题,将类放在文件夹之外(工作正常)
App_Code文件夹不适用于Web应用程序项目
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html