2011-05-06 23 views
0

私はバージョンリソースツールを作成しようとしています.-最近、私はFileVersionInfoクラスを最近見つけたためです。 FileVersionInfo.GetVersionInfoを使用して、コードを介して実行可能ファイルのバージョン情報を取得しています。今、コードを使用して、実行可能ファイルのバージョン情報を更新したいと思います。私は情報を得るためにクラスが組み込まれているかどうかはわかりませんでした。バージョン情報を置き換える(C#)

もしそうでなければ、をファイルの情報の代わりにに置き換えるために、次のようなコードを使用するように考えました。私はVB6でこれに似たようなことをしていました。これが私の考えを得た場所です。

File.ReadAllBytes(@"\MyFile.exe") 
// Convert the data into a string 
// Use the Replace function to find original version information (obtained via FileVersionInfo), and replace it with new information to my liking. 

これは機能しますか?そうでない場合、誰かがより良いアイデアを持っているかもしれません

おかげで、 エヴァン

+0

実行ファイルの一部としてコンパイルされたバージョン情報はありませんか?ターゲットを再コンパイルせずにバージョン情報を更新することはできません。 – Tejs

+0

単にコードを再度コンパイルしてアセンブリ情報を更新しないでください。正直、私はあなたがしたいことが可能であると信じていません。バージョン情報は、マイクロソフトが理由でアクセス可能かつ読み取り専用にしているため利用可能です。 –

+1

この類似の質問に対する答えを見てください:http://stackoverflow.com/questions/284258/how-do-i-set-the-version-information-for-an-existing-exe-dll –

答えて

0

私はファイル全体を読み取り、VERSIONINFOブロックはそんなに簡単になります一致しないと思います。正しくリコールすれば、リソースデータは文字列だけではなく、バイナリチャンクがそこに存在します。

代わりに、BeginUpdateResource(),UpdateResource()およびEndUpdateResource()を呼び出してください。コード例といくつかのポインタについては、this articleを参照してください。

3

方法を見つけることができても、あなたがしようとしていることはしないでください。多くの場合、アセンブリをインクルードするときは、バージョン番号が必要です。あなたが気まぐれにアセンブリのバージョンを設定すると、あなたのアセンブリに頼っている人々に大混乱を招く可能性があります。

<compilation debug = "true" targetFramework = "4.0"> 
    <assemblies> 
     <add assembly = "System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly = "System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly = "System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    </assemblies> 
</compilation> 
+0

これは最良の方法です: http://www.codeproject.com/KB/library/ResourceLib.aspx 残念ながら、これは理解するのが非常に難しいです。しかし、私はそれが正しいことをすると確信しています。 –

関連する問題