2009-04-08 66 views
17

我在構建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. 

問題是,我不明白這個引用是在哪裏。

  • ...我已經尋找跨整個解決方案和CANF IND網頁本身(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中總是失敗。我是否錯過了一些微妙之處?

回答

-7

所以看起來MasterPages導致了ASP.NET 2.0的更多問題。我以前遇到過問題,現在看來也是一樣的。

我創建了一個新頁面,沒有 MasterPage,它工作正常。 MasterPage僅用於樣式。恥辱。

7

當我碰到同樣的問題時,我碰到了你的帖子。對於循環引用問題,可能有一百萬個解決方案,但是我是Master Pages的直接結果。

我意外地在嵌套文件夾之外使用嵌套的母版頁創建了一個頁面。 例子:

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

雖然Page.aspx被引用Master2.Master爲母版,它通常會構建和錯誤,當我「發佈」。

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"> 

卸下注冊固定它。

8

我也遇到了這個問題,能夠通過選擇「使用固定的命名和單個頁面程序集」從Visual Studio中獲得成功的發佈。由於某種原因,似乎避免了更復雜的思想,有一個循環參考。

+0

如何使用***在_targets_ msbuild或部署腳本(powershell)中使用固定命名... ***? – Kiquenet 2015-07-22 12:25:41

1

如果我有一個包含在母版頁內的用戶控件(ASCX),我會體驗這種行爲。

通常我簡單地忽略錯誤,因爲它在第二次構建後不見了。

+2

我有同樣的問題。現在我在主頁面中使用一個,並在代碼中以編程方式添加控件:phGoogleAnalyticsPageTracker.Controls.Add(Page.LoadControl(virtualPathToGoogleAnalyticsPageTrackerControl)); – mathijsuitmegen 2010-07-06 13:14:20

1

此錯誤在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相同的目錄中才能停止此錯誤。

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的仍然可以批量編譯其它非受影響的目錄,如果它的慾望。

有關編譯元素和批處理屬性的更多信息可用at msdn

12

轉貼自:

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

如果你有以下設置: /folder1/Control1.ascx>引用控制2 /folder2/Control2.ascx>參考CONTROL3 /文件夾1/CONTROL3。 ascx 這意味着folder1 dll將引用folder2 dll,它將再次引用folder1 dll,從而導致「循環文件引用」。


這幫了我今天;我在一個文件夾中引用了母版頁的根中有一個母版頁,它引用了根中的一個不同頁面。將哪些文件夾放在哪個文件夾中,像魅力一樣。

0

對我來說這些技巧沒有工作

-setting批=真 -deleting ASP。淨臨時文件和IIS重置 -replacing可疑的ascx文件

,問題是從引用最近添加的項目我的解決方案,並最終建成後卸載它。而這個新添加的磁帶庫中取出參考解決了這個問題

0

我在一次重大的開發檢修期間出現了同樣的錯誤。在我的特殊情況下,這是因爲我正在使用「JUNK」文件夾來拖放未使用或重命名的文件。我的垃圾文件夾正在編譯,最近刪除的文件導致了這個問題。

我通過排除我的垃圾文件夾中的單個文件來解決這個問題。

4

我有類似的問題,並從@ JBicford的答案得到了一個接近的線索。我在另一個文件夾中使用Master.master的網站根目錄上使用了Default.aspx。不知道是否會導致這種情況,還沒有測試過這個解決方案。

但是對於有興趣解決發佈問題的人來說,下面的選項適用於VS 2012,所有其他選項因其他文件夾和頁面的依賴關係不正確而失敗。對一些代碼,我繼承

enter image description here

+0

在我的情況下,這是在不同文件夾的根和母版頁上的Default.aspx。 – Megrez7 2017-07-06 21:52:11

0

同樣的問題。

我的問題是我有一個文件在app_data文件夾中,但它有一個名爲MyControls的空間。我最終將該文件移出app_data文件夾並創建了一個新文件夾「我的控件」。

1

我有這個問題,但沒有任何的建議,工作對我來說,我的可能是一個獨特的案例,但以防萬一其他人遇到同樣的問題:

礦看似無關,與Circular References和實際上是由於我的構建輸出。經過一段時間,我無法在無法加載的控件上放置一個斷點,並得到一個通知,告訴我它不會被觸發。

改變兩個項目屬性解決方案的配置設置搭建Any CPU糾正問題。

+0

如果在命令行上運行msbuild,添加/ p:Platform =「任何CPU」也可以解決此問題 – MadManMonty 2014-08-04 11:57:36

2

對於那些喜歡我的人來說,這個問題一直在進行。我相信我可能有另一種解決方案,其他的都失敗了。我們有一個MVC應用程序的這個問題,我們花了幾個星期嘗試各種建議無濟於事。

我們發現我們正在運行McAfee Virus scanner V 8.0。我們發現當我們禁用VirusScan控制檯中的按訪問掃描程序時,我們可以構建和調試,而不會出現問題。

唯一的是,當這個設置被禁用它會自動重新啓用自己每15分鐘。

我覺得這是值得分享..

感謝, 院長

編輯:如果你有你的機器的本地管理員訪問權限這隻適用。從安全的角度來看,關於關閉AV掃描器的合理擔憂(正確如此)。事實上,如果你在一個由網絡管理員控制的工作環境中,你甚至可能會被推回來。我相信還有另一種方法可以做到這一點,但現在這似乎對我們有用,但如果我找到另一種解決方法(這是網絡管理員友好),我會在這裏分享。

+0

感謝您分享有關AV掃描儀的建議;過去幾天我們一直在努力解決這個問題,並且一旦我禁用了我們的Cruise Control .NET構建服務器上的實時按需AV掃描,這個「循環引用」錯誤就消失了。 – ssahmed555 2015-02-03 12:32:48

0

在大多數情況下,這發生在複製aspx頁面之後。 確保您的課程聲明爲Inherits="MyPage"不會在整個網站上重複。

0

其實,這篇文章解釋了爲什麼會發生,以及如何解決它: 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:不允許使用循環文件引用。

當然,錯誤表示在我的代碼中有某種循環引用。如果我錯誤地創建了循環引用,我環顧四周檢查並重新檢查。但是,如果有任何循環引用,代碼將不會編譯。代碼編譯正常,但運行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移到了不同​​的目錄中,並且錯誤消失了!