.NET 程序集如何在 IIS ASP.NET 上下文中检测到自己的版本?

How can a .NET assembly detect its own version within an IIS ASP.NET context?

我有一个 c# 函数,它在 winforms 应用程序中运行良好,可以检测其容器 DLL 的版本,如 AssemblyInfo.cs:

中所标记
private string getVersion() {
  System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
  FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
  string tempFileVersion = fvi.FileVersion;

  if (tempFileVersion.EndsWith(".0")) {
    return tempFileVersion.Substring(0, tempFileVersion.Length - 2);
  } else {
    return tempFileVersion;
  }
}

问题是,此函数在 IIS 中作为 ASP.NET webapp 的一部分调用时会抛出异常。我假设它归结为权限问题,但是有没有一种方法可以让函数在 IIS 上下文中询问它位于“你的版本是什么”中的 DLL?

超简单的解决方案来自 Steeeve:

新增class:

public static class VersionInfo {
   public const string VersionString = "1.0";
}

修改2行AssemblyInfo.cs:

[assembly: AssemblyVersion(VersionInfo.VersionString)]
[assembly: AssemblyFileVersion(VersionInfo.VersionString)]

现在我的 DLL 中的任何其他地方需要在 运行 时知道它的版本可以简单地调用 VersionInfo.VersionString 而不需要求助于混乱和昂贵的反射。