Я создал метод, который получает имя и версию сборки текущей страницы, чтобы отображать ее в нижнем колонтитуле страницы. Это работает просто отлично, но я хотел бы переместить эту логику в элемент управления, который я мог бы перетащить на любую главную страницу проекта веб-приложения, которая ссылается на мою библиотеку элементов управления. Однако в библиотеке управления 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).
Как получить сборку веб-проекта из контекста элемента управления, не запрашивая ее явно по имени?