.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
而不需要求助于混乱和昂贵的反射。
我有一个 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
而不需要求助于混乱和昂贵的反射。