我正在尝试在母版页的<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( ".", "" );
我无法弄清楚为什么这是问题。
你能帮我解决这个问题吗?
答案 0 :(得分:1)
您对FileVersionInfo.GetVersionInfo
的来电不是以安全的方式进行的。
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>
我相信你会同意它更具可读性和可维护性。