C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: ビルド日時をEXEファイルに書き込む方法 [1]


(過去ログ 138 を表示中)

[トピック内 26 記事 (21 - 26 表示)]  << 0 | 1 >>

■81303 / inTopicNo.21)  Re[7]: ビルド日時をEXEファイルに書き込む方法
  
□投稿者/ 倍子 (12回)-(2016/09/06(Tue) 22:32:54)


すいません、まだ、バージョンが自動更新できない問題は解決していないので81284の方法を使いたいと考えています。

あと、アセンブリファイルは隠れていて見えないのですがこれを表示するにはどうしたら良いですか?
逆に隠しファイルに戻すにはどうしたら良いですか?
見えないので、My Projectフォルダー内のファイルを直接改変しているのですが
VS上で表示できる方法があれば教えてください。

引用返信 編集キー/
■81309 / inTopicNo.22)  Re[8]: ビルド日時をEXEファイルに書き込む方法
□投稿者/ 魔界の仮面弁士 (888回)-(2016/09/07(Wed) 09:05:44)
2016/09/07(Wed) 09:10:53 編集(投稿者)

No81303 (倍子 さん) に返信
> あと、アセンブリファイルは隠れていて見えないのですがこれを表示するにはどうしたら良いですか?
ソリューション エクスプローラーの[すべてのファイルを表示]アイコンを押してみてください。

> 逆に隠しファイルに戻すにはどうしたら良いですか?
ソリューション エクスプローラーの[すべてのファイルを表示]アイコンを押し直してみてください。


追記:
> 見えないので、My Projectフォルダー内のファイルを直接改変しているのですが
プロジェクトプロパティの[アプリケーション]タブに
[アセンブリ情報...]ボタンが無いでしょうか。主要な項目については、
AssemblyInfo.vb を直接編集せずとも、ここから指定できるようになっています。
引用返信 編集キー/
■81310 / inTopicNo.23)  Re[4]: ビルド日時をEXEファイルに書き込む方法
□投稿者/ 魔界の仮面弁士 (889回)-(2016/09/07(Wed) 10:23:39)
No81295 (倍子 さん) に返信
> win7ですが、右クリックメニューに
> ファイルバージョンと製品バージョンがあり
> 製品バージョンがAssemblyVersionだと思っていたのですが
> どうも違っていて、右クリックメニューにはAssemblyVersionが表示されていないことが分かりました。

現行 OS では見かけませんが、XP では、ファイルのプロパティに
"Assembly Version" という項目が表示されていたようです。
http://www.atmarkit.co.jp/fdotnet/dotnettips/187asmverinfo/asmverinfo.html


Windows 7 で確認する場合は、VS2010 の[ファイル]-[開く]-[ファイル]で
exe ファイルを直接開き、"Version" リソースを開くと表示される
"Assembly Version" というエントリーで確認あるいは編集できます。
(VB2010 Express で可能かどうかは分かりません)


ちなみに、この Assembly Version を確認するためには、
VerQueryValue API を利用できます。 No81295 で取得できる
アセンブリバージョンとは別の項目ですが、通常は
同じ値が書きこまれているはずです。


Imports System.Reflection
Imports System.Runtime.InteropServices
Module Module1
  Private Declare Auto Function GetFileVersionInfoSize Lib "version" (ByVal fileName As String, <Out()> ByRef handle As Integer) As Integer
  Private Declare Auto Function GetFileVersionInfo Lib "version" (ByVal fileName As String, ByVal handle As Integer, ByVal length As Integer, <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=2)> ByVal lpData() As Byte) As Boolean
  Private Declare Auto Function VerQueryValue Lib "version" (ByVal block() As Byte, ByVal subBlock As String, ByRef ptr As IntPtr, ByRef length As Integer) As Boolean

  Public Function GetAssemblyVersion() As String
    Dim filePath As String = Assembly.GetExecutingAssembly().Location
    Dim dummy As Integer = 0
    Dim size As Integer = GetFileVersionInfoSize(filePath, dummy)
    If size = 0 Then
      Return Nothing
    End If
    Dim block(size - 1) As Byte
    If GetFileVersionInfo(filePath, dummy, block.Length, block) Then
      Dim subBlock As String = "\StringFileInfo\000004b0\Assembly Version"
      Dim ptr As IntPtr = IntPtr.Zero, length As Integer = 0
      If VerQueryValue(block, subBlock, ptr, length) Then
        If ptr <> IntPtr.Zero Then
          Dim s As String = Marshal.PtrToStringAuto(ptr)
          Return s
        End If
      End If
    End If
    Return Nothing
  End Function
End Module
引用返信 編集キー/
■81316 / inTopicNo.24)  Re[5]: ビルド日時をEXEファイルに書き込む方法
□投稿者/ 倍子 (14回)-(2016/09/07(Wed) 12:42:42)
重ね重ね詳細なご回答ありがとうございます。

あと、もう一つ質問です。
アセンブリ情報ファイルの中で変数を使うにはどうしたら良いですか?


タイトルや製品名にアセンブリ名を使いたいので
My.Application.Info.AssemblyName
を入れてみたのですが、
固定値でないと駄目だとエラーが出てしまいます。
これはVSの仕様上できないことなのでしょうか?




引用返信 編集キー/
■81331 / inTopicNo.25)  Re[6]: ビルド日時をEXEファイルに書き込む方法
□投稿者/ 魔界の仮面弁士 (890回)-(2016/09/08(Thu) 13:42:24)
No81316 (倍子 さん) に返信
> アセンブリ情報ファイルの中で変数を使うにはどうしたら良いですか?

アセンブリ情報ファイル(AssemblyInfo.vb)に限った話では無いですが、
属性値にはリテラルや定数しか渡すことができません。


逆に言えば、定数であれば定義できるため、たとえば
MsgBox(My.Application.Info.Title) で表示される部分を

=======================
<Assembly: System.Reflection.AssemblyTitle(Test.Hoge)>
Public Module Test
Public Const Hoge As String = "アセンブリタイトル"
End Module
=======================

のように宣言することはできます。
指定できるのが Const だけなので、実用性は無いですけれどね。


とはいえ、Visual Studio 自身は、このような管理を想定していないため、
 <Assembly: AssemblyTitle(Test.Hoge)>

 <Assembly: AssemblyTitle("Test.Hoge")>
を区別できません。

上記のいずれを AssemblyInfo.vb に指定した場合も、My Project の
[アプリケーション] で [アセンブリ情報]-[タイトル] には
共に「Test.Hoge」という、同じ表記で表示されてしまいますので、
実際には定数さえもお奨めしません。そのままリテラルで書くのが安全です。



もし、どうしても動的に構成したいのでれば、
MSBuild 側で対処することを検討してみてください。
http://stackoverflow.com/questions/8739493/msbuild-for-updating-the-assemblyinfo-file
http://d.sunnyone.org/2013/02/msbuildassemblyinfo.html
引用返信 編集キー/
■81371 / inTopicNo.26)  Re[7]: ビルド日時をEXEファイルに書き込む方法
□投稿者/ 倍子 (16回)-(2016/09/12(Mon) 00:17:32)
魔界の仮面弁士 さん

非常に参考になりました。
ありがとうございます。
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -