私は最初に説明された問題だと思うものを抱えていました。Winform アプリとコンソール アプリケーションを 2 つの別々のプロジェクトとして持っていますが、1 つのセットアップ プロジェクトで両方を処理します。
Winform アプリとコンソール アプリの両方が同じ 2 つの外部アセンブリを使用します。1 つはソリューションの一部ではなく (フォルダー内のファイルへの参照)、もう 1 つは C# クラス プロジェクトから (プロジェクトへの参照)。
私が見つけたのは、インストーラーは、プロジェクトの出力がすべてインストール マシン上の 1 つのフォルダーにまとめられていると想定していることです。したがって、すべての共通アセンブリも、それらを必要とする実行可能ファイルと共存します。したがって、最初の実行可能ファイルからプロジェクト出力をフォルダーに追加すると、その依存関係がすべて表示され、2 番目のプロジェクト出力が追加されると、まだ追加されていないアセンブリのみが表示されます。
アプリケーション フォルダーの下にサブフォルダーを作成しても問題ありません。プロジェクト出力 (exe、dll、および res) に関する限り、Visual Studio はアプリケーション フォルダーを 1 つの単位として扱うように見えます。
これを解決するには 2 つの方法があります。1 つ目は、実行可能ファイルごとに個別のインストール プロジェクトを作成することです。大規模なプロジェクトでは、これは多くのセットアップ プロジェクトになる可能性があります。
すべてを 1 つのインストールに保持する場合は、共有アセンブリに GAC を使用することをお勧めします。これについては、別のスタック オーバーフロー記事で説明されています。
MSIは仕事を成し遂げることができます。[ターゲット マシンのファイル システム] を右クリックし、[追加]、[GAC] の順にクリックします。追加したフォルダーを右クリックし、[追加]、[プロジェクト出力] を選択します。これにより、アセンブリが確実に gac-ed になります。
後でアセンブリに変更や拡張を加えた場合、アセンブリは .NET レイヤーによって管理されるため、GAC は私の考えではより良いソリューションです。.NET の利点の 1 つは、Win 98 および以前のバージョンの Windows にあった古い「DLL 地獄」の問題を排除することです。一般的なコードに使用することを強くお勧めします。