Генерация файла конструктора не удалась: не удалось загрузить файл или сборку - PullRequest
6 голосов
/ 30 марта 2010

У меня есть проект веб-приложения ASP.NET, который ссылается на другой проект под названием ModusCore (или Modus.Core). До сих пор у нас было множество элементов управления, которые без проблем использовали ModusCore, но в последнее время я создал один, который вызывает проблемы. Вот код:

public class PortalLinkNew : WebControl
{
    public string Text { get; set; }
    public bool AllowPush { get; set; }

    public PortalLinkNew()
    {
        AllowPush = true;
    }

    public IChannelRequest ChannelRequest { get; set; }

    protected override HtmlTextWriterTag TagKey
    {
        get { return HtmlTextWriterTag.A; }
    }

    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        try
        {
            base.AddAttributesToRender(writer);
            if (DesignMode || Page == null || !(Page is IPortalPage))
            {
                return;
            }
            string href = "/";
            if (ChannelRequest != null)
            {
                var portalPage = (IPortalPage)Page;
                href = portalPage.Module.PortalRouter.GetLinkUrl(portalPage, ChannelRequest, AllowPush);
            }
            writer.AddAttribute(HtmlTextWriterAttribute.Href, href);
        }
        catch (Exception)
        {

        }
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.Write(Text);
        base.RenderEndTag(writer);
    }
}

В приведенном выше коде IPortalPage и IChannelRequest являются интерфейсами, определенными в Modus.Core.

Я намерен использовать этот элемент управления в моем коде следующим образом:

<tnl:PortalLinkNew ID="CancelButton" runat="server" Text="Cancel" OnInit="CancelButton_Init" />

Это на самом деле компилируется и запускается без проблем, но когда я редактирую страницу (представление исходного кода) в Visual Studio 2008, я получаю следующее предупреждение:

Генерация файла конструктора не удалась: не удалось загрузить файл или сборку 'Modus.Core, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null' или одна из его зависимостей. Система не может найти указанный файл.

Как говорится, он не регенерирует файл конструктора, что означает, что любая попытка сослаться на элемент управления CancelButton в коде позади приводит к ошибке компилятора. Следуя совету, который я нашел в Интернете, я попытался удалить соответствующий файл .ascx.designer.cs и использовать «Преобразовать в веб-приложение» на этой странице, но он говорит, что не может перестроить файл конструктора по той же причине, о которой говорилось выше.

Я перепробовал все, что мог придумать: очистить решение, перезапустить Visual Studio, перезагрузить компьютер, удалить каталог кода и извлечь его из репозитория, удалить и повторно добавить ссылки на проект и dll и т. Д. Та же проблема возникает на нескольких компьютерах, которые я использую.

Как заставить конструктор VS перестать работать?

Ответы [ 9 ]

18 голосов
/ 31 марта 2010

У меня очень похожая проблема (которую я пока не могу решить). Приложение, с которым у меня возникла проблема, было преобразовано из «Проекта веб-сайта», и я не могу избавиться от ощущения, что это как-то связано с ним. И я на VS 2005.

Теперь я могу добавить, что

a) «иногда» (я не мог понять, когда именно пока) уловка «Преобразовать в веб-приложение» работает для меня (но не всегда)

b) «иногда» (то же, что и выше) помогает переключиться в представление дизайнера, что-то изменить и сохранить -> * .designer.cs восстанавливается

Обычно я пытаюсь выполнить несколько операций в произвольном порядке после добавления элемента управления на свою страницу, пока "что-то" не сработает.

В Интернете много шума по этому поводу, но я не смог найти "настоящего решения" для этого (пока). Кроме того, что я прочитал, кроме того, что он может иметь отношение к (не совпадающим / не существующим) пространствам имен.

Когда я проверял свое приложение, в * .cs-файлах действительно не было деклараций namespace. Поэтому я добавил их (в * .cs и * .aspx) и некоторое время думал, что это сработало. Но, к сожалению, теперь я знаю, что это не так ...

14 голосов
/ 21 февраля 2012

Мое решение:

  1. Закройте и снова откройте Visual Studio.
  2. Ваша проблема исправлена? Если нет, перейдите к 1.
5 голосов
/ 10 октября 2010

Добавление третьего варианта для случая, когда @ scherand (a) и (b) потерпели неудачу:

c) «Иногда», это также работает:

  • Удалить <%@ Register... %> записей
  • Сохраните файл .AS? ​​X. Пусть дизайнер пожалуется.
  • Добавить <%@ Register... %> снова
  • Сохранить еще раз

[Добавлено 13 октября 2010 г.]:
г) «Иногда», а также:

  • Очистить файл AS? X от всех, кроме самого основного содержимого.
  • Начните добавлять кусочки назад, один бит за раз.
  • Сохранить.
  • Убедитесь, что вы не получили сообщение об ошибке.
  • Добавьте обратно еще несколько штук. Полоскание. Повторите.

Для этого я использую инструмент сравнения текста с резервной копией файла AS? X.

Я стараюсь избегать добавления элементов управления, которые вызывают ошибку до самого конца. Я также пытаюсь добавить снизу страницы. Однако я не знаю жесткого правила. Это упражнение по ощущению кишечника.

(кто-нибудь когда-нибудь выяснит это?)

2 голосов
/ 22 апреля 2010

Я боролся с этой проблемой весь день, и вы не поверите, кто был виновником. Я отключил ReSharper 5.0 и вдруг ошибки исчезли. Невероятно.

0 голосов
/ 09 марта 2017

Другое решение, которое я нашел эффективным в Visual Studio 2015, - это закрыть VS, а затем очистить следующие каталоги:

  • % UserProfile% \ AppData \ Local \ Temp \ Временные файлы ASP.NET \
  • % USERPROFILE% \ AppData \ Local \ Microsoft \ VisualStudio \ 14.0 \ ProjectAssemblies \

Снова откройте решение и выберите Build-> Clean Solution.

Теперь перейдите на страницу ASPX и выберите «Проект» -> «Преобразовать в веб-приложение»

.
0 голосов
/ 04 апреля 2016

Я использую ReSharper Platform 6. Мне удалось решить эту проблему, выполнив следующие действия:

  1. ReSharper (строка меню)> Параметры ...
  2. Среда> Общее> Очистить кеши
  3. Перезагрузите Visual Studio
0 голосов
/ 28 февраля 2013

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

Прежде всего удалите файл конструктора для проблемного файла aspx. Щелкните правой кнопкой мыши файл aspx и выберите «Преобразовать в веб-приложение», аналогично тому, что предлагали другие. Выполнение этого над файлом происходит быстрее, и вместо предупреждения, которое вы должны искать, появляется всплывающее окно с ошибкой. В нашем случае ошибка была Generation of the designer file for OurPage.aspx failed: Could not load file or assembly 'OurCustomAssembly, Version=1.0.234.567...

Затем я использовал инструмент, который ищет содержимое файла (например, Agent Ransack ) и указывает его в нашу исходную папку (в которой также есть файлы build / cache) и ищет файлы ", содержащие текст "с конкретной версией. Для каждого из появившихся проектов я удалил ссылку на сбойную сборку, заново добавил ее, а затем перестроил отдельный проект. Поиск снова показал, что версия исчезла.

Я снова запустил Convert to Web Application и теперь получил ту же ошибку, но с другим файлом. На этот раз ничего из вышеперечисленного не сработало. Мне удалось определить, что только некоторые из тегов Register были проблемными. Я удалил эти теги регистров, создал защищенные переменные в коде страницы (поскольку их не было в файле дизайнера) и перекомпилировал решение. После этого я удалил созданные мной переменные, сохранил, перечитал все теги Register, сохранил. На этом этапе файл конструктора успешно сгенерирован.

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

0 голосов
/ 24 января 2012

Ну, у меня была эта проблема в течение двух дней. Поскольку ни одно из предложенных решений полностью не решило проблему (она выглядит очень ... ошибочно), я достиг кнопки Информация о сборке (или что-то похожее ... мой VS на испанском языке) на вкладке приложения в свойствах проекта. Я только изменил нейтральный язык ... и теперь он правильно развертывается.

Я понятия не имею о корреляции, но я пришел сюда, увидев, как некоторые ошибки, связанные с информацией о сборке, отображались на консоли после «преобразования в веб-приложение».

Чтобы убедиться, что ваше веб-приложение в порядке для развертывания, вы можете увидеть первые строки файлов aspx и проверить, все ли CodeFiles имеют CodeBehind. Если вы увидите «Codefile = ...», то на компьютере развертывания произойдет сбой.

Извините за то, что не был более явным, но это странная проблема для меня: S

0 голосов
/ 24 февраля 2011

Копирование отсутствующих сборок в каталог Visual Studio \ Common7 \ IDE \ Public Assemblies дало мне более конкретные сообщения об ошибках, чем «не удалось загрузить файл или сборку». Отсюда я закомментировал некоторые проблемные части страницы, удалил файл .designer.cs и выбрал «Преобразовать в веб-приложение» в контекстном меню правой кнопкой мыши на файле .ascx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...