我有一个用C#编写的Web应用程序,在IIS下作为dll运行。
我也有一些常见的代码编译成一个单独的程序集(dll)。此公共代码包含一个返回版本信息的函数(如下所示)。如何修改此代码以便它返回Web应用程序DLL的版本信息而不是公共代码dll?
...
private static Assembly _assy;
private static void CheckAssemblyInfoLoaded()
{
if (_assy == null)
{
_assy = Assembly.GetCallingAssembly();
}
}
public static string Version
{
get {
CheckAssemblyInfoLoaded();
Version v = _assy.GetName().Version;
return v.ToString();
}
}
...
答案 0 :(得分:1)
使用Assembly.GetAssembly(Type type)
方法获取程序集引用,在该方法中传入该程序集中定义的任何对象的类型,例如Assembly.GetAssembly(typeof(MyClass));
答案 1 :(得分:0)
就个人而言,我会放弃静态并将方法合并为一个。
public string GetVersion()
{
Assembly assy = Assembly.GetCallingAssembly();
Version v = assy.GetName().Version;
return v.ToString();
}
此场景中的静态可能会产生一些不需要的结果。我还将属性更改为方法;个人设计选择。
你得到错误的程序集,因为属性get方法从同一程序集中的另一个方法反弹,从而改变了调用者。