Я создал метод, который получает имя и версию сборки текущей страницы, чтобы я мог отображать ее в нижнем колонтитуле страницы. Он работает отлично, но я хотел бы переместить эту логику в элемент управления, который я мог бы занять на любую главную страницу проекта веб-приложения, которая ссылается на мою библиотеку управления. Однако в библиотеке управления Assembly.GetExecutingAssembly()
возвращает сборку библиотеки управления, а не сборку веб-проекта.Как получить сборку страницы из элемента управления?
Вот метод:
private string GetVersion()
{
const string cacheKey = "Web.Controls.ApplicationVersion";
string version = (string) Page.Cache[cacheKey];
if (version == null)
{
Assembly assembly = Assembly.GetExecutingAssembly();
// get the assembly version
Version assemblyVersion = assembly.GetName().Version;
// get the product name
string productName;
AssemblyProductAttribute productAttribute =
assembly.GetCustomAttributes(typeof (AssemblyProductAttribute), false).Cast
<AssemblyProductAttribute>().FirstOrDefault();
if (productAttribute != null)
{
productName = productAttribute.Product;
}
else
{
productName = String.Empty;
}
version = String.Format("{0} {1}", productName, assemblyVersion);
Page.Cache[cacheKey] = version;
}
return version;
}
Я также попытался Assembly.GetEntryAssembly()
который возвращает нуль, и Assembly.GetCallingAssembly()
, который возвращает блок управления. Наконец, я попробовал Assembly.GetAssembly(Page.GetType())
, который возвращает тип страницы, сгенерированный во время выполнения (ASP.abc).
Как я могу получить сборку веб-проектов из контекста элемента управления, не запрашивая его явно по имени?
На данный момент я добавил свойство ApplicationType в элемент управления, который я использую, чтобы создать экземпляр Type и получить сборку с 'Assembly.GetAssembly (type)'. Это не идеальный, но он работает. – jrummell