당신이 시도 할 수 있었다 (그것을 테스트하고 나를 위해 일한)
Public NotInheritable Class ApplicationInformation
Private Sub New()
End Sub
''' <summary>
''' Gets the executing assembly.
''' </summary>
''' <value>The executing assembly.</value>
Public Shared ReadOnly Property ExecutingAssembly() As System.Reflection.Assembly
Get
Return If(m_executingAssembly, (InlineAssignHelper(m_executingAssembly, System.Reflection.Assembly.GetExecutingAssembly())))
End Get
End Property
Private Shared m_executingAssembly As System.Reflection.Assembly
''' <summary>
''' Gets the executing assembly version.
''' </summary>
''' <value>The executing assembly version.</value>
Public Shared ReadOnly Property ExecutingAssemblyVersion() As System.Version
Get
Return If(m_executingAssemblyVersion, (InlineAssignHelper(m_executingAssemblyVersion, ExecutingAssembly.GetName().Version)))
End Get
End Property
Private Shared m_executingAssemblyVersion As System.Version
''' <summary>
''' Gets the compile date of the currently executing assembly.
''' </summary>
''' <value>The compile date.</value>
Public Shared ReadOnly Property CompileDate() As System.DateTime
Get
If Not m_compileDate.HasValue Then
m_compileDate = RetrieveLinkerTimestamp(ExecutingAssembly.Location)
End If
Return If(m_compileDate, New System.DateTime())
End Get
End Property
Private Shared m_compileDate As System.Nullable(Of System.DateTime)
''' <summary>
''' Retrieves the linker timestamp.
''' </summary>
''' <param name="filePath">The file path.</param>
''' <returns></returns>
''' <remarks>http://www.codinghorror.com/blog/2005/04/determining-build-date-the-hard-way.html</remarks>
Private Shared Function RetrieveLinkerTimestamp(filePath As String) As System.DateTime
Const peHeaderOffset As Integer = 60
Const linkerTimestampOffset As Integer = 8
Dim b = New Byte(2047) {}
Dim s As System.IO.FileStream = Nothing
Try
s = New System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
s.Read(b, 0, 2048)
Finally
If s IsNot Nothing Then
s.Close()
End If
End Try
Dim dt = New System.DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(System.BitConverter.ToInt32(b, System.BitConverter.ToInt32(b, peHeaderOffset) + linkerTimestampOffset))
Return dt.AddHours(System.TimeZone.CurrentTimeZone.GetUtcOffset(dt).Hours)
End Function
Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
target = value
Return value
End Function
End Class
을 그리고 다음과 같이 사용 :
Messagebox.Show("This application was built on: " & ApplicationInformation.CompileDate.ToString())
참고 : https://stackoverflow.com/a/3634544/4237809에서 함께 집어 들고 및 http://blog.codinghorror.com/determining-build-date-the-hard-way/
내를. 설정이 작동합니다 ... – Codexer
어떻게 이런 상황에서 작동합니다. ApplicationBuildDate = Now와 같은 것을 사용하면 실제로 빌드 날짜가 아닌 날짜로 해석됩니다. –
VS가 매크로를 사용하여 가변 값으로 DateTimes를 쓸 수 있는지 (또는 ressource 파일에 넣을 수 있는지) 알 수 없습니다. 하지만 당신은 [이것 좀 봐 ...] (http://blog.codinghorror.com/determining-build-date-the-hard-way/) –