スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C#で実行ファイルにdllを埋め込む

  • 2013/08/10 15:56
  • Category: C#
環境
Visual Studio 2012 Express for Windows Desktop
.NET4.5

自作ライブラリを実行ファイルに埋め込もうとしたら引っかかったのでメモ。

http://qiita.com/krsak/items/75a257cc0866a7e8e4aa
.NET4や4.5の場合、ここの「ビルド後に実行するコマンドライン」だけでは
"An exception occurred during merging:
Unresolved assembly reference not allowed: System.Core."
とエラーが起きて正常にマージされないようです。

そこで次のオプションを加えたところ正常にマージできました。


/targetplatform:v4,<path to your v4 framework directory>


コマンド全体としては以下のようになります。
(ILMergeはインストール済み、.NET4/4.5のディレクトリは"C:\Windows\Microsoft.NET\Framework\v4.0.30319"にあるものとします)


set fname_new=$(TargetName)_merge$(TargetExt)
"C:\Program Files\Microsoft\ILMerge\ILMerge" /wildcards /out:%fname_new% $(TargetFileName) *.dll /targetplatform:v4,"C:\Windows\Microsoft.NET\Framework\v4.0.30319"


ただ、マージ処理に時間がかかるっぽいのでReleaseビルド時にのみマージするように書き直してみました。


set fname_new=$(TargetName)_merge$(TargetExt)
if $(ConfigurationName) == Release (
"C:\Program Files\Microsoft\ILMerge\ILMerge" /wildcards /out:%fname_new% $(TargetFileName) *.dll /targetplatform:v4,"C:\Windows\Microsoft.NET\Framework\v4.0.30319"
)


参考
http://www.atmarkit.co.jp/fdotnet/dotnettips/426ilmerge/ilmerge.html
http://qiita.com/krsak/items/75a257cc0866a7e8e4aa
http://geekswithblogs.net/michelotti/archive/2010/06/02/ilmerge---unresolved-assembly-reference-not-allowed-system.core.aspx
http://stackoverflow.com/questions/2961357/using-ilmerge-with-net-4-libraries/
http://stackoverflow.com/questions/150053/how-to-run-visual-studio-post-build-events-for-debug-build-only
http://stackoverflow.com/questions/12005318/post-build-set-command-and-variable-error


8/11追記
.pdbファイルを埋め込みたくない場合はオプションに /ndebug を追加します。

スポンサーサイト

Pagination

Trackback

Trackback URL

http://someprog.blog.fc2.com/tb.php/5-cd0c1bb5

Comment

Post Your Comment

コメント登録フォーム
公開設定

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。