22

我在 VS2008 中构建解决方案时遇到问题。通常,它在环境中编译得很好。有时,它会失败:

/xxx_WEB/secure/CMSManagedTargetPage.aspx(1): error ASPPARSE: Circular
file references are not allowed.

我重建,它工作正常。

然而,现在我正在设置 CruiseControl.NET 系统,并在将构建集成到 CC 之前使用 MSBuild 测试我签出的代码。现在,每次我进行 MSBuild 时,我都会得到:

"Q:\cc\xxx\checked out from svn\xxx.sln" (default target) (1) ->
(xxx_WEB target) ->
  /xxx_WEB/secure/CMSManagedTargetPage.aspx(1): error ASPPARSE: Circular
file references are not allowed.

问题是,我看不到这个引用在哪里。

  • 我已经在整个解决方案中搜索了引用,并且除了在页面或其代码隐藏或字符串中之外的任何地方都找不到对页面本身 (CMSManagedTargetPage) 的引用,例如:

    C:\dev2008\xxx\IWW.xxx.ASPNET\AspxHttpHandler.cs(82): inputFile = context.Server.MapPath("~/secure/CMSManagedTargetPage.aspx"); C:\dev2008\xxx\IWW.xxx.ASPNET\AspxHttpHandler.cs(83): virtualPath = "~/secure/CMSManagedTargetPage.aspx";

我的程序集引用也很好(据我所知)。我的 Web 应用程序位于依赖项的“顶部”,没有任何内容引用它,因此错误页面不会导致循环引用。当然,页面本身可能会引用同一个程序集/网站中的 UserControl 等内容,但如前所述,在 CMSManagedTargetPage 上的搜索没有产生任何结果,因此不会发生这种情况。

更改 web.config 中的批处理属性对 MSBuild 没有影响。

我发现它“有时”在 VS 中失败并且在 MSBuild 中总是失败,这很奇怪。我错过了一些微妙之处吗?

4

16 回答 16

15

转自:

http://ellisweb.net/2009/12/fixing-the-circular-file-references-are-not-allowed-error-in-asp-net/

如果您有以下设置: /folder1/Control1.ascx > References Control2 /folder2/Control2.ascx > References Control3 /folder1/Control3.ascx 这意味着folder1 dll将引用folder2 dll,它将再次引用folder1 dll,导致“循环文件引用”。


今天这对我有帮助;我在根目录中有一个母版页,它引用了文件夹中的母版页,该目录引用了根目录中的不同页面。改组哪些页面在哪些文件夹中就像一个魅力。

于 2011-02-14T11:04:29.610 回答
9

I ran into your post when I ran into the same problem. There are probably a million solutions to a Circular reference problem, but mine was a direct result of Master Pages.

I accidentally created a page using a nested masterpage, outside the nested folder. Example:

Master1.Master
Page.aspx
(Folder1) 
Master2.Master

While Page.aspx was referencing Master2.Master as its masterpage, It would build normally, and error when I "Publish".

于 2009-06-05T22:50:53.777 回答
8

我也遇到了这个问题,通过选择“使用固定命名和单页程序集”,能够从 Visual Studio 中成功发布。出于某种原因,这似乎避免了编译器认为存在循环引用。

于 2010-04-13T20:27:22.323 回答
6

我有类似的问题,并从@JBicford 的回答中得到了密切的线索。我在另一个文件夹中使用 Master.master 在网站的根目录上使用 Default.aspx。不知道这是否会导致这种情况,尚未测试此解决方案。

但是对于有兴趣解决发布问题的人,以下选项适用于 VS 2012,所有其他选项都失败,因为对其他文件夹和页面的依赖不正确。

在此处输入图像描述

于 2013-03-19T13:27:45.323 回答
4

我发现当 Visual Studio 批量编译页面时出现此错误。我可以通过在 web.config 中的编译元素上设置 batch="false" 来解决这个问题。

更具体地说,我在包含问题页面的目录中添加了一个 web.config。该 web.config 文件只有以下内容:

<?xml version="1.0"?>

<configuration>
  <system.web>
    <!-- Added to prevent error ASPPARSE: Circular file references are not allowed. -->
    <compilation batch="false" />
  </system.web>
</configuration>

这样,Visual Studio/MSBuild 仍然可以根据需要批量编译其他不受影响的目录。

有关编译元素和批处理属性的更多信息,请访问 msdn

于 2011-01-03T22:18:46.000 回答
3

对我来说,它也在母版页上注册 aspx 页面。

例如(在母版页中):

<%@ Register Assembly="MyPage" Namespace="MyPage" TagPrefix="MyPage" %>
...
<asp:ContentPlaceHolder id="MyPage" runat="server"></asp:ContentPlaceHolder>

然后在aspx页面中:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" 
    CodeFile="MyPage.aspx.cs" Inherits="MyPage" Title="Untitled Page" %>
<asp:Content ID="SomeContent" ContentPlaceHolderID="MyPage" Runat="Server">

删除寄存器修复它。

于 2009-09-22T13:55:11.070 回答
2

我遇到了这个问题,但没有一个建议对我有用,我的可能是一个独特的案例,但以防其他人遇到同样的问题:

我的似乎与我无关Circular References,实际上是由于我的构建输出。一段时间无处可去后,我在无法加载的控件上放置了一个断点,并收到一条通知,告诉我它不会被击中。

更改项目属性解决方案配置设置以构建以Any CPU纠正问题。

于 2013-10-14T09:30:31.347 回答
2

对于那些喜欢我的人来说,这个问题一直在绕圈子。我相信我可能有另一种解决方案,但其他方法都失败了。我们在 MVC 应用程序中遇到了这个问题,我们花了数周时间尝试各种建议,但无济于事。

我们发现我们正在运行 McAfee 病毒扫描程序 V 8.0。我们发现,当我们从 VirusScan 控制台禁用按访问扫描程序时,我们能够毫无问题地构建和调试。

唯一的问题是,当此设置禁用时,它将每 15 分钟自动重新启用一次。

我觉得这个值得分享。。

谢谢,院长

编辑:仅当您对您的机器具有本地管理员访问权限时,这才有效。从安全的角度来看,关闭 AV 扫描仪是有道理的(理所当然)。事实上,如果你在一个由网络管理员控制的工作环境中,你甚至可能会被他们拒绝。我确信还有另一种方法可以做到这一点,但现在这似乎对我们有用,但如果我找到另一种解决方法(即网络管理员友好),我将在这里分享。

于 2014-10-20T13:27:59.653 回答
2

这个错误在 ASP.NET 4.0 中仍然存在。

我得到的错误是:

/DirA/PageA.aspx(3): error ASPPARSE: Circular file references are not allowed.
/DirA/PageA.aspx(71): error ASPPARSE: Unknown server tag 'Controls:ControlA'.

ControlA 与 PageA.aspx(3) 中引用的控件相同。我发现我必须将 ControlA 移动到与 PageA 相同的目录中才能停止此错误。

于 2010-08-27T05:20:38.590 回答
1

如果我有一个包含在母版页中的用户控件 (ASCX),我会遇到这种行为。

通常我只是忽略该错误,因为它在第二次构建之后就消失了。

于 2010-06-30T05:49:22.010 回答
1

实际上,这篇文章解释了它为什么会发生以及如何解决它: http ://www.gitshah.com/2011/04/how-to-fix-circular-file-references-are.html

如何修复 ASP.Net 中的“不允许循环文件引用”错误

在我的一个 .Net 项目中,我遇到了一个有趣的问题。我浪费了几个小时来修复它。因此,我决定分享我的发现,这样其他人就不必浪费时间解决同样的问题。

问题

问题很简单,应用程序无法构建。我在使用 MSBuild 构建 ASP.Net Web 项目时遇到的错误是:/someProject/Controls/A/ucA.ascx(2): error ASPPARSE: Circular file references are not allowed。

当然,错误表明我的代码中有某种循环引用。如果我错误地创建了循环引用,我环顾四周检查并重新检查。但是,如果有任何循环引用,则代码将无法编译。代码编译得很好,但是当我们运行 aspnet_compiler.exe 时它失败了。

ASP.Net 编译工具 (aspnet_compiler.exe) 使您能够编译 ASP.Net Web 应用程序,这有助于提高应用程序性能,因为最终用户不会遇到对应用程序的第一次请求的延迟。

我再次检查,但肯定没有代码相关的循环依赖,那么为什么 aspnet_compiler.exe 抱怨循环文件引用?

说明

谷歌搜索了一下,我发现,默认情况下,在网站项目中,ASP.Net 会为每个文件夹创建一个 DLL。因此,如果您有以下设置:

用户控件 ucA.ascx 存在于目录“A”中。ucA.ascx 引用另一个用户控件 ucB.ascx 用户控件 ucB.ascx 存在于目录“B”中。ucB.ascx 引用另一个用户控件 ucC.ascx 用户控件 ucC.ascx 存在于目录“A”中。

文件夹A的DLL会引用文件夹B的DLL,又会引用文件夹A的DLL,造成“循环文件引用”。

这就是 aspnet_compiler.exe 因“循环文件引用”错误而失败的原因。

修复

有两种方法可以解决此问题

重新排列用户控件(或 MasterPages)以删除循环引用。通常这意味着将用户控件移动到单独的目录中。在我们的示例中,将 ucC.ascx 移动到新目录“C”(首选解决方案)。在 web.config 文件的编译标签中使用 batch=”false”。这将导致为站点中的每个控件/页面创建一个新的 DLL。这应该可以修复错误,但对于性能来说确实很糟糕,所以应该避免。

我将 ucC.ascx 移到了不同​​的目录中,是的,错误消失了!

于 2015-07-14T19:54:58.053 回答
0

Same issue on some code I inherited.

My issue was I had a file in the app_data Folder, but it had a namespace of MyControls in it. I ended up moving that file out of the app_data folder and created a new folder "my controls".

于 2013-05-24T02:57:15.830 回答
0

对我来说,这些技巧不起作用

-setting batch=true -deleting asp.net Temp 文件和 IIS reset -replaceing 可疑的 ascx 文件

问题在于将最近添加的项目引用到我的解决方案并在最终构建后将其卸载。删除对这个新添加的库的引用解决了问题

于 2011-07-24T08:11:17.740 回答
0

在一次重大的开发大修期间,我遇到了同样的错误。在我的特殊情况下,这是因为我使用的是“JUNK”文件夹,我在其中拖放未使用或重命名的文件。我的垃圾文件夹正在编译,我最近删除的一个文件导致了这个问题。

我通过排除垃圾文件夹中的单个文件来解决此问题。

于 2011-11-21T14:41:57.650 回答
0

在大多数情况下,这发生在复制 aspx 页面之后。确保您的班级 Inherits="MyPage"没有在整个网站上重复。

于 2015-04-04T14:45:41.233 回答
0

另一个问题在于后面的代码:MasterPageA : B => PageC : B => PageC 使用 MasterPageA。它发生错误“不允许循环文件引用”。Visual Studio 不会报告此类中的错误。您必须手动检查。

于 2021-09-29T08:38:42.750 回答