C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Setupプロジェクトで重複する参照dllをひとつにしたい


(過去ログ 92 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■54913 / inTopicNo.1)  Setupプロジェクトで重複する参照dllをひとつにしたい
  
□投稿者/ コリアンダー (1回)-(2010/11/09(Tue) 13:36:58)

分類:[.NET 全般] 

VS2008のセットアッププロジェクトで、以下のサイトを参考にカスタム動作を行っています。

http://dobon.net/vb/dotnet/deployment/customaction.html

そこで、セットアップのソリューションにセットアッププロジェクトとカスタム動作用のプロジェクトを含めているのですが、
インストールするEXEとカスタム動作のプロジェクトで、同じ名前のdll(別途作成したもの・内容は全く同じ)を参照しているため、
セットアッププロジェクトの「見つかった依存関係」およびファイルシステムの「アプリケーションフォルダ」内に
このdllが重複して表示されます。
そのため、そのままビルドすると、「複数のオブジェクトのターゲットの場所が同じです(作成したdll名)」という警告メッセージが出るため、
プロジェクトを開くたびに重複したdllの片方を除外してビルドを行っています。

いちいちプロジェクトを開くたびに片方のdllを除外せずとも、警告なくビルドする方法はあるでしょうか?
ちなみに、インストールするEXE・カスタム動作用クラスおよびこれらが参照するdllはVB(2008)で作成しています。
引用返信 編集キー/
■54914 / inTopicNo.2)  Re[1]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ shu (161回)-(2010/11/09(Tue) 14:09:33)
No54913 (コリアンダー さん) に返信
> インストールするEXEとカスタム動作のプロジェクトで、同じ名前のdll(別途作成したもの・内容は全く同じ)を参照しているため、
同じdllを参照するようにすればいい気がします。プロジェクト参照で同じプロジェクトを参照でも可。
引用返信 編集キー/
■54916 / inTopicNo.3)  Re[2]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ コリアンダー (2回)-(2010/11/09(Tue) 15:21:15)
2010/11/09(Tue) 15:22:14 編集(投稿者)

No54914 (shu さん) に返信
> ■No54913 (コリアンダー さん) に返信
>>インストールするEXEとカスタム動作のプロジェクトで、同じ名前のdll(別途作成したもの・内容は全く同じ)を参照しているため、
> 同じdllを参照するようにすればいい気がします。プロジェクト参照で同じプロジェクトを参照でも可。

アプリケーション(インストールするEXE)のプロジェクトで参照しているdllと、カスタム動作のプロジェクトで参照している
dllは同じパスにあるものなのですが、セットアッププロジェクトではアプリケーションのEXEファイル(および必要なファイル)のみを
読み込んでいるため、このEXEの依存関係となっているdllも一覧に表示されてしまっています。
(パス情報を見ると、EXEのあるフォルダ内のdllのようです。)
根本的に上記方法は正しいやり方ではないのでしょうか?
引用返信 編集キー/
■54917 / inTopicNo.4)  Re[3]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ shu (163回)-(2010/11/09(Tue) 15:33:22)
No54916 (コリアンダー さん) に返信

MainExePath\Main.exe             => MainExePath\a.dll を参照

CustomSetupPath\CustomSetup.exe  => CustomSetupPath\a.dll を参照


Setup.sln
  ├-- MainExe.prj
 └-- CustomSetup.prj

こんな感じだと思いますが、
  MainExePath\a.dll とCustomSetupPath\a.dll はそれぞれセットアップ先に
必要なものなので両方セットアップに含まれてしまいます。
MainExePath\a.dll とCustomSetupPath\a.dll が違うファイルだと中身は同じといっても
同じとは認識されないので同じものにするか別の名前にする必要があります。


引用返信 編集キー/
■54919 / inTopicNo.5)  Re[3]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ とっちゃん (552回)-(2010/11/09(Tue) 17:41:42)
とっちゃん さんの Web サイト
No54916 (コリアンダー さん) に返信
> アプリケーション(インストールするEXE)のプロジェクトで参照しているdllと、カスタム動作のプロジェクトで参照している
> dllは同じパスにあるものなのですが、セットアッププロジェクトではアプリケーションのEXEファイル(および必要なファイル)のみを
> 読み込んでいるため、このEXEの依存関係となっているdllも一覧に表示されてしまっています。
> (パス情報を見ると、EXEのあるフォルダ内のdllのようです。)
> 根本的に上記方法は正しいやり方ではないのでしょうか?

見つかった依存関係にあるファイル(2個あるのですよね?)のうち、いらないほうを除外(コンテキストメニューから選択可能)すれば、怒られなくなりますよ。

引用返信 編集キー/
■54939 / inTopicNo.6)  Re[4]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ コリアンダー (3回)-(2010/11/11(Thu) 09:27:24)
No54919 (とっちゃん さん) に返信
> 見つかった依存関係にあるファイル(2個あるのですよね?)のうち、いらないほうを除外(コンテキストメニューから選択可能)すれば、怒られなくなりますよ。
>
はい、ソリューションエクスプローラーで、片方のdllを右クリックで除外にすれば、ビルドで警告は出なくなるのですが、
その状態で保存してソリューションを閉じ、再度ソリューションを開くと先ほど除外を行ったはずのdllが勝手に復活しているのです。
もし問題があるとすればどこでしょうか?
引用返信 編集キー/
■54941 / inTopicNo.7)  Re[5]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ とっちゃん (553回)-(2010/11/11(Thu) 10:01:20)
とっちゃん さんの Web サイト
No54939 (コリアンダー さん) に返信
> ■No54919 (とっちゃん さん) に返信
>>見つかった依存関係にあるファイル(2個あるのですよね?)のうち、いらないほうを除外(コンテキストメニューから選択可能)すれば、怒られなくなりますよ。
>>
> はい、ソリューションエクスプローラーで、片方のdllを右クリックで除外にすれば、ビルドで警告は出なくなるのですが、
> その状態で保存してソリューションを閉じ、再度ソリューションを開くと先ほど除外を行ったはずのdllが勝手に復活しているのです。
> もし問題があるとすればどこでしょうか?

ためしに両方とも、依存関係から除外して、ソリューションを保存&再読み込みしたらどうなりますか?
もし、それで復活しないのであれば、その状態からファイルの追加で直接重複するDLLを指定してみてください。

それでもダメとなったら、ソリューション自身の構成を考え直さないとだめですね。
引用返信 編集キー/
■54942 / inTopicNo.8)  Re[5]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ shu (165回)-(2010/11/11(Thu) 10:16:22)
2010/11/11(Thu) 10:16:33 編集(投稿者)
No54939 (コリアンダー さん) に返信

Setup.sln
  ├-- MainExe.prj  => dll.prjをプロジェクト参照,dllを参照しない
 ├-- CustomSetup.prj => dll.prjをプロジェクト参照,dllを参照しない
 ├-- dll.prj
 └-- Setup.prj
        ├-- MainExe.prj  の出力
        ├-- CustomSetup.prj の出力
        └-- dll.prj の出力

これで出来ないですか?

引用返信 編集キー/
■54947 / inTopicNo.9)  Re[6]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ コリアンダー (4回)-(2010/11/11(Thu) 11:27:24)
>とっちゃんさん
両方とも、依存関係から除外して、ソリューションを保存&再読み込みすると、両方のdllの除外が消えて、復活してしまいます。

>shuさん
EXEやカスタム動作用のプロジェクトでも該当DLLのプロジェクト参照を行い、DLLそのものを参照しない方法ですか...
DLLは他でも使用しているので、別でメンテナンスを行っているのでDLL参照を行っているのですが、
プロジェクト参照にするのが一般的なのでしょうか?
そうであればそのように再検討しますが、ビルドの度にDLLの除外を行うのにも慣れてきたので...
引用返信 編集キー/
■54948 / inTopicNo.10)  Re[7]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ コリアンダー (5回)-(2010/11/11(Thu) 11:50:55)
自己レスです。
原因が分かりました。
インストーラに含まれる別のEXEファイルの依存関係を見てみると、このEXEが参照している該当DLLのバージョンが古いことが分かりました。
このEXEの参照DLLのバージョンを合わせたところ、問題は解決しました。
dllのパス情報を見ただけでは分かりませんでした。
みなさまにはお騒がせしてしまい、申し訳ありませんでした。
解決済み
引用返信 編集キー/
■54949 / inTopicNo.11)  Re[7]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ shu (167回)-(2010/11/11(Thu) 11:58:07)
No54947 (コリアンダー さん) に返信
プロジェクト参照が大変なら

Setup.sln
  ├-- MainExe.prj  => <aaaa>\aaa.dllを参照する
 ├-- CustomSetup.prj => <aaaa>\aaa.dllを参照する
 └-- Setup.prj
        ├-- MainExe.prj  の出力
        └-- CustomSetup.prj の出力

または

Setup.sln
  ├-- MainExe.prj  => <aaaa>\aaa.dllを参照する
 └-- Setup.prj
        ├-- MainExe.prj  の出力
        └-- CustomSetup.exe

CustomSetup.sln
  └-- CustomSetup.prj  => <aaaa>\aaa.dllを参照する

として<aaaa>\aaa.dll作成時、必ずMainExe.prj とCustomSetup.prj  の
ビルドをしなおす

とか

引用返信 編集キー/
■54950 / inTopicNo.12)  Re[8]: Setupプロジェクトで重複する参照dllをひとつにしたい
□投稿者/ コリアンダー (6回)-(2010/11/11(Thu) 12:10:52)
No54949 (shu さん) に返信
> (略)
> として<aaaa>\aaa.dll作成時、必ずMainExe.prj とCustomSetup.prj の
> ビルドをしなおす

はい、まさにご指摘の通り、一部EXEのビルドのし忘れでした。
No.54948の通り、自己解決したことをご報告します。
お騒がせしました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -