5

ライブラリをアプリケーションにマージするために、プロジェクトで次のビルド後のアクションを使用しています。

IF $(ConfigurationName) == Debug GOTO end
cp $(TargetPath) $(TargetDir)app_unmerged.exe
del $(TargetPath)
"C:\Program Files\Microsoft\ILMerge\ilmerge.exe" /internalize $(TargetDir)MyApp_unmerged.exe $(TargetDir)someLib.dll /out:$(TargetDir)myApp.exe
del $(TargetDir)myApp_unmerged.exe $(TargetDir)someLib.dll
:end

これはうまくいきます。これで、インストーラ プロジェクトが作成され、プロジェクト出力が追加されました。「Primary Output from」、つまり /bin/Release の exe が使用されることを期待します。しかし、実際には /bin/release/myApp.exe の代わりに、 /obj/release/myApp.exe が使用されます。

この動作を変更して、/bin/release の出力をインストーラー プロジェクトに使用できるかどうかを知っている人はいますか? ありがとう。

4

3 に答える 3

2

/obj フォルダーに Ilmerge を適用して問題を解決しました。これはビルド後のイベント構成です。

COPY $(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName) $(TargetDir)temp.exe $(solutionDir)\lib\ilmerge /wildcards /t:exe /out:"$(ProjectDir) obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)" "$(TargetDir)temp.exe" "$(TargetDir)log4net.dll" "$(TargetDir)other.dll" DEL $(TargetDir)temp 。EXE

于 2011-04-04T20:52:19.860 に答える
1

この問題に対する実際の解決策はないようですが、回避策は存在します。Microsoft Connectでチケットを作成しました:https ://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID = 428898

Microsofts anwser:

やあ、

これらのビルド後のアクションを実行するには、それらをバッチファイルに入れてから、ビルド後のイベントダイアログでバッチファイルを呼び出すための適切なコマンドを追加する必要があります。スクリプトには、いくつかのVisualStudio変数への参照を持つインスタンスがいくつかあることがわかります。これらの変数は環境変数として公開されていないため、パラメーターとしてバッチファイルに渡す必要があります。

お役に立てば幸いです。

CandyChiangプログラムマネージャー-VisualStudio

于 2009-05-09T10:40:25.410 に答える
1

ファイルを明示的に配置しました。つまり、セットアップ プロジェクトにプライマー コンテンツを使用するように指示する代わりに、.exe/.dll ファイルを明示的に配置しました。
これはかなりうまく機能します。入力するファイルとセットアップ プロジェクトのユーザー相対パスを制御できるので、セットアップ プロジェクトを他のマシンで使用できます。

于 2009-04-01T13:32:22.940 に答える