Как определить время разработки в проекте библиотеки управления VS.NET 2003
-
02-07-2019 - |
Вопрос
Приведенный ниже код не работает должным образом, чтобы определить, находится ли он в режиме разработки (VS.Net 2003 — Библиотека управления):
if (this.Site != null && this.Site.DesignMode == true)
{
// Режим разработки
}
еще
{
// Время выполнения
}
Он используется в сложном пользовательском элементе управления, производном от другого пользовательского элемента управления и включающем в себя другие пользовательские элементы управления.
Есть ли другой способ определить время разработки в VS.NET 2003 или в чем проблема с приведенным выше кодом?
Решение
DesignMode
не будет работать изнутри конструктора.Некоторые альтернативы (не уверен, что они работают в версии 1.1):
if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
или
вызов GetService(typeof(IDesignerHost))
и посмотреть, вернет ли он что-нибудь.
Мне больше повезло с первым вариантом.
Другие советы
Я думаю, вы могли бы использовать HttpContext.Current == null, как описано в http://west-wind.com/weblog/posts/189.aspx
В .Net 2.0 есть Control.DesignMode (http://msdn.microsoft.com/en-us/library/system.web.ui.control.designmode.aspx).Думаю, у вас есть веские причины оставаться на VS 2003, поэтому обновление может оказаться для вас не вариантом.
Обновлять Если вы используете Winforms, Component.DesignMode (http://msdn.microsoft.com/en-us/library/system.comComponentmodel.comComponent.designmode.aspx) — правильный способ проверки.Однако, если this.Site.DesignMode не работает должным образом, Component.DesignMode может работать не так, поскольку он выполняет именно ту проверку, которую вы выполняете (Site != null && Site.DesignMode).
Возможно, это маловероятно, но уверены ли вы, что ваш базовый элемент управления не переопределяет свойство Site?