当我尝试获取汇编版本信息时出现空引用异常

时间:2017-02-07 09:44:00

标签: c# asp.net webforms

我正在尝试在母版页的<head>部分获取汇编版本信息。我必须在HTML部分中执行此操作。这是我得到空引用异常的行:

<script src="/MyViewCore.js?v=<% Response.Write( System.Diagnostics.FileVersionInfo.GetVersionInfo( System.Reflection.Assembly.GetExecutingAssembly().Location ).FileVersion.Replace( ".", "" ) ); %>" type="text/javascript"></script>

孤立的表达是:

System.Diagnostics.FileVersionInfo.GetVersionInfo( 
    System.Reflection.Assembly.GetExecutingAssembly().Location
)
    .FileVersion
    .Replace( ".", "" );

我无法弄清楚为什么这是问题。

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您对FileVersionInfo.GetVersionInfo的来电不是以安全的方式进行的。

https://msdn.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.getversioninfo(v=vs.110).aspx

GetVersionInfo的文档声明如果它无法读取任何版本信息,则返回一个包含“仅请求的文件名”的对象,这意味着FileVersion属性将为null。

  

如果文件不包含版本信息,则FileVersionInfo仅包含所请求文件的名称。

请注意,您的代码不必要地冗长,并且调用Response.Write是不必要的,因为您可以使用速记<%=(或<%:语法进行自动HTML编码)。您还可以使用<%@ Import %>指令导入名称空间。

如果你使用的是C#6.0(Visual Studio 2015),我建议使用null-safe operator ?.

我将如何做到这一点:

<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.Reflection" %>
<%
    String assembly = Assembly.GetExecutingAssembly().Location;
    FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo( assembly );
    String version = versionInfo.FileVersion?.Replace(".", "") ?? "someFallbackValue";
%>

...

<script src="/MyViewCore.js?v=<%: version %>" type="text/javascript"></script>

我相信你会同意它更具可读性和可维护性。