其网站使用的程序集版本号列表
Posted
技术标签:
【中文标题】其网站使用的程序集版本号列表【英文标题】:List of version numbers of assemblies used by it's web site 【发布时间】:2009-07-07 12:26:51 【问题描述】:一个简单的问题。我有一个包含多个程序集的 ASP.NET Web 应用程序,我需要为网站中的每个程序集创建一个版本信息列表。 (甚至可能还有其他一些人,但重点主要是网站本身。)
此列表将显示在受保护页面上的同一应用程序中,用于验证网站的安装和升级。当然,我可以遍历 BIN 文件夹中的所有二进制文件并从中提取信息,但有更好的选择吗?
第二个问题:从另一个程序集中提取版本信息的最佳方法是什么?但我想以前有人问过,我自己可以找到答案。 (带有反射、GetExecutingAssembly 和其他一些东西。)
【问题讨论】:
【参考方案1】:IEnumerable<String> GetLoadedAssemblies()
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
yield return assembly.ToString();
为您提供应用程序域中使用的每个程序集的名称(包括版本号)。
mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
等等
使用这个的一个可能的问题是:如果网站刚刚启动,那么您感兴趣的一些程序集可能还没有加载到 AppDomain 中,因为它们不太可能被仅使用这个的特殊页面引用上的功能。如果您首先单击站点以确保所有内容都已加载,它应该可以正常工作,但是如果您需要更强大的功能,则必须在上面的代码中添加一些 AppDomain.Load() 语句。
【讨论】:
效果很好,而且比我能想出的东西还多。 :-) 谢谢!【参考方案2】:您还可以使用 Assembly 类的 GetReferencedAssemblies() 方法来获取您的 Web 应用程序引用的所有程序集。
【讨论】:
【参考方案3】:关于您的第二部分,我认为您在不加载程序集的情况下从程序集中获取信息会有困难。如果您不打算实际使用该程序集,那么您可能不想随身携带它,因为您无法从 AppDomain 中卸载程序集。
查看创建一个新的 AppDomain 并在其中加载程序集以获得所需的信息。然后,您可以丢弃新的 appdomain,并在完成后丢失所有程序集引用。
这是Using AppDomain to Load and Unload Dynamic Assemblies 上的一篇博文。
编辑:更好:Thread on ***
【讨论】:
【参考方案4】:我打开了这个页面:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e)
List<string> assemblyNames = GetLoadedAssemblyNames(false);
StringBuilder sb = new StringBuilder();
foreach (string ass in assemblyNames)
sb.AppendFormat("0\n", ass);
this.Results.Text = sb.ToString();
private static List<string> GetLoadedAssemblyNames(bool hideSystem)
List<string> names = new List<string>();
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
string name = a.GetName().FullName;
if (hideSystem && (name.StartsWith("System.") || name.StartsWith("Microsoft.")))
continue;
names.Add(name);
names.Sort();
return names;
</script>
<html>
<body>
<form id="form1" runat="server">
<h1>Loaded Assemblies</h1>
<p><asp:Literal runat="server" ID="AppName" /></p>
<pre><asp:Literal runat="server" ID="Results" /></pre>
</form>
</body>
</html>
【讨论】:
以上是关于其网站使用的程序集版本号列表的主要内容,如果未能解决你的问题,请参考以下文章