Обновление разрывов зависимостей tagPrefix - PullRequest
0 голосов
/ 27 января 2020

У меня есть сайт WebForms, который прекрасно работает в своем текущем состоянии. Одна из сторонних зависимостей выпустила исправление безопасности, поэтому я обновился с Nuget, и внезапно что-то сломалось.

На одной странице есть тег компонента:

<Creator:CoolComponent ID="CoolControl" Width="100%" Height="600" runat="server" />

Перед обновление, там не было никаких проблем. Ошибка На сборке нет строгого имени, и я убедился, что Creator.Foo.CoolComponent все еще существует, именно там, где и должно быть. Насколько я могу судить, здесь ничего не должно ломаться. Но, видимо, компилятор не согласен!

Все вопросы, которые я могу найти в SO по поводу этой ошибки, связаны с компонентами, которые вы создали сами, и зарегистрировать их с тегом <%@ Register %>. Это сторонний компонент, и ссылка, которая корректно работала до обновления, поэтому не похоже, что это применимо.

Очевидная проблема для чего-то подобного обычно заключается в том, что обновленный версия Creator.Foo.dll не загружается по какой-либо причине, но когда это происходит, она обычно выдает предупреждение компилятора. Здесь нет никаких предупреждений, поэтому я понятия не имею, каким должен быть следующий курс действий. Кто-нибудь знает, как решить эту проблему?

1 Ответ

1 голос
/ 26 февраля 2020

Неизвестный тег сервера 'Creator: CoolComponent'

Если вы видите эту ошибку, это может быть обработано, что соответствующая сборка / пространство имен разрешена, однако класс / компонент CoolComponent делает не имеют необходимого атрибута набора инструментов.

В противном случае вы, вероятно, увидите ошибку, связанную с разрешением сборки / пространства имен.

эта ошибка, по-видимому, связана с компонентами, которые вы создали сами, и регистрируете их с помощью тег <% @ Register%>

Это различие (регистрация настраиваемого префикса тега на странице по сравнению с Web.config) является просто способом регистрации префикса тега для отдельной страницы (на практике - работает быстрее) по сравнению с глобальным.

Однако для целей отладки может быть лучше проверить в директиве страницы:

Откройте настраиваемый префикс тега Creator и проверьте предложенные (intellisense) теги:

<%@ Page ...%>
<%@ Register TagPrefix="Creator" Assembly="Creator.Foo" Namespace="Creator.Foo" %>
...
<html ...>
<body>
    <form ... runat="server">
    <Creator:ANYTHING_HERE_? />
    </form>
</body>
</html>

Видите ли вы необходимый контроль? Любые другие элементы управления?

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

using System;
using System.Web.UI;
using Creator.Foo;

public partial class YOUR_PAGE_CLASS_HERE : Page {
    protected void Page_Init(object sender, EventArgs e) {
        CoolComponent c = new CoolComponent();
        c.ID = "CoolControl";
        Form.Controls.Add(c);
    }
}

Вы видите этот класс? Можно ли создать его экземпляр и добавить в форму программно? Этот элемент управления отображается так, как должен?

Если вы правильно видите CoolComponent, перейдите к его определению (с помощью клавиши F12). Проверьте соответствующие атрибуты класса. Вы видите что-то связанное с ToolboxItem?

using System;
using System.ComponentModel;
using System.Web.UI.WebControls;

namespace Creator.Foo {
    [ToolboxItem(true)]
    public class CoolComponent : WebControl { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...