Ссылки на циркулярные файлы не допускаются

У меня возникла проблема в построении моего решения в VS2008. Обычно он прекрасно компилируется в среде. Иногда это терпит неудачу с:

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

Я перестраиваю и все работает нормально.

Однако сейчас я занимаюсь настройкой системы CruiseControl.NET и тестирую свой проверенный код с помощью MSBuild, прежде чем интегрировать сборку в CC. Теперь, каждый раз, когда я 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";

Мои сборочные ссылки тоже хороши (насколько я знаю). Мое веб-приложение находится на "вершине" зависимостей, и ничто не ссылается на него, и поэтому неисправная страница не может вызвать циклическую ссылку. Конечно, сама страница может ссылаться на что-то, например, UserControl в той же сборке / веб-сайте, но, как упоминалось ранее, поиск по CMSManagedTargetPage не дал никаких результатов, поэтому этого не происходит.

Изменение атрибута пакета в web.config не повлияло на MSBuild.

Я нахожу очень странным, что это "иногда" дает сбой в VS и всегда дает сбой в MSBuild. Я скучаю по тонкости?

17 ответов

Решение

Таким образом, кажется, что MasterPages вызывают больше проблем с ASP.NET 2.0. У меня были проблемы с ними раньше, а теперь, кажется, то же самое.

Я создал новую страницу без MasterPage, и она работала нормально. MasterPage буквально используется только для стиля. Позор.

Перемещено из:

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

Если у вас есть следующие настройки: /folder1/Control1.ascx > Ссылки Control2 /folder2/Control2.ascx > Ссылки Control3 /folder1/Control3.ascx Это означает, что dll folder1 будет ссылаться на dll folder2, которая снова будет ссылаться на dll folder1, вызывая "круговую ссылку на файл".


Это помогло мне сегодня; У меня была главная страница в корне, ссылающаяся на главную страницу в папке, которая ссылалась на другую страницу в корне. Перемешивать, какие страницы были, в каких папках работал шарм.

Я столкнулся с вашим постом, когда столкнулся с той же проблемой. Вероятно, существует миллион вариантов решения Циркулярной ссылки, но мое было прямым результатом Master Pages.

Я случайно создал страницу, используя вложенную главную страницу, вне вложенной папки. Пример:

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

В то время как Page.aspx ссылался на Master2.Master в качестве главной страницы, он работал нормально и выдает ошибку при публикации.

Я также столкнулся с этой проблемой и смог успешно выполнить публикацию из Visual Studio, выбрав "Использовать фиксированные имена и одностраничные сборки". По некоторым причинам это, кажется, избегает мысли компилятора, что есть круговая ссылка.

У меня была похожая проблема, и я получил точную подсказку от ответа @JBicford. Я использовал Default.aspx в корне сайта, используя Master.master в другой папке. Не знаю, может ли это быть причиной, еще не тестировали это решение.

Но для тех, кто заинтересован в решении проблемы с публикацией, нижеприведенная опция работает для VS 2012, все остальные опции не работают из-за неправильных зависимостей от других папок и страниц.

Я обнаружил, что получаю эту ошибку, когда Visual Studio пакетно компилирует страницы. Я смог решить эту проблему, установив batch="false" в элементе компиляции в web.config.

Чтобы быть более конкретным, я добавил 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.

Для меня это было также регистрация страницы 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">

Удаление реестра исправило это.

Для тех из вас, кто, как я, ходили по кругу с этим вопросом. Я полагаю, что у меня может быть другое решение - все остальное терпит неудачу. У нас была эта проблема с приложением MVC, и мы потратили несколько недель, пытаясь различные предложения безрезультатно.

Мы обнаружили, что у нас запущен McAfee Virus scanner V 8.0. мы обнаружили, что когда мы отключили сканер при доступе с консоли VirusScan, мы смогли собрать и отладить без проблем.

Единственное, что при отключении этого параметра он автоматически включается каждые 15 минут.

Я чувствовал, что этим стоит поделиться..

Спасибо декан

Изменить: это работает, только если у вас есть локальный доступ администратора к вашему компьютеру. С точки зрения безопасности существуют серьезные опасения по поводу отключения AV-сканеров (это справедливо). Фактически, если вы работаете в рабочей среде, контролируемой сетевым администратором, вы можете даже получить от них отпор. Я уверен, что есть другой способ сделать это, но сейчас это, кажется, работает для нас, но если я найду другой обходной путь (который является чистым для администратора), я поделюсь здесь.

Эта ошибка все еще существует в 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, чтобы остановить эту ошибку.

У меня была эта проблема, но ни одно из предложений не сработало для меня, мое может быть уникальным случаем, но на случай, если другие люди столкнутся с той же проблемой:

Моя, казалось бы, не имела ничего общего с Circular References и был на самом деле из-за моего вывода сборки. Через некоторое время, когда я никуда не попал, я установил контрольную точку на элемент управления, который не мог быть загружен, и получил уведомление о том, что он не будет активирован.

Изменение свойств проекта и параметров конфигурации решения для Any CPU исправил проблему.

На самом деле, этот пост объясняет, почему это происходит и как это исправить: http://www.gitshah.com/2011/04/how-to-fix-circular-file-references-are.html

Как исправить "круговые ссылки на файлы не допускаются" Ошибка в ASP.Net

В одном из моих проектов.Net я столкнулся с интересной проблемой. Я потратил пару часов, чтобы починить его. Поэтому я решил поделиться своими выводами, чтобы другим не пришлось тратить свое время на решение той же проблемы.

Проблема

Проблема была довольно простой, приложение не собиралось. Ошибка, которую я получал при создании веб-проекта ASP.Net с использованием MSBuild, была: /someProject/Controls/A/ucA.ascx(2): ошибка ASPPARSE: циклические ссылки на файлы не допускаются.

Конечно, ошибка говорит, что в моем коде есть какая-то круговая ссылка. Я оглянулся вокруг, чтобы проверить и перепроверить, если я создал круговую ссылку по ошибке. Однако, если бы была какая-либо циклическая ссылка, код не скомпилировался бы. Код компилировался нормально, но не получалось, когда мы запускали aspnet_compiler.exe.

Средство компиляции ASP.Net (aspnet_compiler.exe) позволяет скомпилировать веб-приложение ASP.Net, что помогает повысить производительность приложения, поскольку конечные пользователи не сталкиваются с задержкой при первом обращении к приложению.

Я проверил еще раз, но, конечно, не было циклической зависимости, связанной с кодом, тогда почему aspnet_compiler.exe жаловался на циклические ссылки на файлы?

Объяснение

Немного погуглив, я обнаружил, что по умолчанию в проекте веб-сайта ASP.Net создает одну DLL на папку. Следовательно, если у вас есть следующие настройки:

Пользовательский элемент управления ucA.ascx присутствует в каталоге "А". ucA.ascx относится к другому пользовательскому элементу управления ucB.ascx. Пользовательский элемент управления ucB.ascx присутствует в каталоге "B". ucB.ascx ссылается на другой пользовательский элемент управления. ucC.ascx. Пользовательский элемент управления. ucC.ascx находится в каталоге "A".

DLL папки A будет ссылаться на DLL папки B, которая снова будет ссылаться на DLL папки A, вызывая "циклическую ссылку на файл".

По этой причине aspnet_compiler.exe завершается ошибкой с "циклической ссылкой на файл".

Исправление

Существует два способа устранения этой проблемы.

Переставьте пользовательские элементы управления (или MasterPages), чтобы удалить циклические ссылки. Обычно это означает перемещение пользовательских элементов управления в отдельные каталоги. В нашем примере перемещение ucC.ascx в новый каталог "C" (Preferred Solution). Используйте batch=”false” в теге компиляции файла web.config. Это приведет к созданию новой библиотеки DLL для каждого элемента управления / страницы сайта. Это должно исправить ошибку, но очень плохо для производительности, поэтому ее следует избегать.

Я переместил ucC.ascx в другой каталог, и да, ошибка исчезла!

Я испытываю это поведение, если у меня есть пользовательский элемент управления (ASCX), который включен в главную страницу.

Обычно я просто игнорирую ошибку, так как она исчезла после второй сборки.

У меня была такая же ошибка во время капитального ремонта. В моем конкретном случае это было потому, что я использовал папку "JUNK", куда я перетаскивал неиспользуемые или переименованные файлы. Моя папка нежелательной почты компилировалась, и файл, который я недавно удалил, вызывал эту проблему.

Я исправил это, исключив отдельный файл из папки нежелательной почты.

В большинстве случаев это происходит после копирования страниц aspx. Убедитесь, что ваш класс указан как Inherits="MyPage" не повторяется на всем сайте.

Для меня эти трюки не сработали

-setting batch=true -удаление временных файлов asp.net и сброс IIS-замена подозрительных ascx файлов

и проблема была в том, что я ссылался на недавно добавленный проект в моём решении и выгружал его после окончательной сборки. Удаление ссылки на эту добавленную библиотеку решило проблему

Еще одна проблема заключается в коде: MasterPageA: B => PageC: B => PageC использует MasterPageA . Возникает ошибка «Циклические ссылки на файлы не допускаются». Visual Studio не сообщает об ошибке в этих классах. Приходится проверять вручную.

Та же проблема с некоторым кодом, который я унаследовал.

У меня была проблема с файлом в папке app_data, но в нем было пространство имен MyControls. В итоге я переместил этот файл из папки app_data и создал новую папку "Мои элементы управления".

Другие вопросы по тегам