VS .NET:インストーラープロジェクトの「からのプライマリ出力>」のビルドイベントを投稿する
-
22-08-2019 - |
質問
プロジェクトで次の投稿ビルドアクションを使用して、libをアプリケーションに統合します。
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
これは正常に機能します。これで、インストーラープロジェクトがあり、プロジェクトの出力を追加しました。 「プライマリ出力からの出力」が使用されると予想されます。つまり、 /bin /リリースです。しかし、実際には/bin/release/myapp.exeの代わりに、/bj/release/myapp.exeが使用されています。
この動作を変更して、インストーラープロジェクトに /bin /リリースの出力を使用できるかどうかを知っていますか?ありがとう。
解決 3
この問題に対する本当の解決策はないようですが、回避策は存在します。 Microsoft Connectでチケットを作成しました。 https://connect.microsoft.com/visualstudio/feedback/viewfeedback.aspx?feedbackid=428898
Microsofts Anwser:
やあ、
これらのポストビルドアクションを実行するには、それらをバッチファイルに配置し、Appropiateコマンドを追加して、ポストビルドイベントダイアログにバッチファイルを呼び出す必要があります。スクリプトには、多くのビジュアルスタジオ変数を参照して、いくつかのインスタンスがあることがわかります。これらの変数を環境変数として公開しないため、バッチファイルにパラメーターとして渡す必要があります。
それが役立つことを願っています!
キャンディチアンプログラムマネージャー - ビジュアルスタジオ
他のヒント
問題を解決します /OBJフォルダーにIlmergeを適用します。これは、私のビルド後のイベント構成です。
$(projectdir)obj $(platformname) $(configurationname) $(targetfilename)$(targetfilename)mep.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
ファイルを明示的に配置します。つまり、セットアッププロジェクトにプリミリーコンテンツを使用するように指示する代わりに、.exe/.dllファイルを明示的に配置します。
これは非常にうまく機能します。どのファイルとセットアッププロジェクトユーザーの相対パスを入力するかを制御できるように、セットアッププロジェクトは他のマシンで使用できます。