1

これは私を夢中にさせています。アプリケーションの一部のレガシー関数を更新および置換するために、VB6 DLL ラッパーで使用される .NET COM DLL を開発しました。

私は現在、クライアント マシンで regasm を使用する要件を取り除こうとしているので、すべて正常に動作するテスト DLL でそれを行う方法を考え出しました。

念のため DLL を分岐し、app.manifest ファイルを追加しました。他のすべてはうまくいき、すべてうまくいきました。マニフェストが埋め込まれ、Visual Studio 2012 がリリース フォルダーに mydll.dll.manifest ファイルを生成します。

次に、元のトランクに戻り、app.manifest ファイルを追加しました (コードの変更がないため、マージしても意味がありません)。ブランチの内容を app.manifest ファイルにコピーし、リリース バージョンをビルドしました。マニフェストは DLL に埋め込まれていますが、mydll.dll.manifest ファイルは生成されません。

mydll.dll.manifest ファイルが必ずしも必要ではないことはわかっていますが、一貫性を持たせたい (そして、何らかの理由でテスト プロセスがトランク バージョンと同じ結果を生成しない) ため、どうすれば強制できますか?それは作成されますか?

これは VB.NET DLL プロジェクトであるため、最初の回答 hereに記載されている「マニフェストの生成」プロパティのドロップダウンがありません (または見つかりません) 。どうすればこれを設定できますか? または、プロジェクトファイルを直接編集して設定する方法はありますか?

参考文献:

4

2 に答える 2

2

あなたはかなり一般的な間違いを犯しています。reg-free COM マニフェストは、DLL を見つけるためにレジストリを調べなくても、アプリケーションが COM サーバーを見つけるのに役立ちます。マニフェストを DLL に埋め込むことは、ニワトリが先か卵が先かの問題を解決しようとするようなものです。最初に DLL を見つけられない場合、Windows はそのマニフェストを見つけることができない可能性があります。

マニフェストは、クライアント アプリの一部である必要があります。VB6 であるため注意が必要です。実行可能ファイルへのマニフェストの埋め込みはサポートされていません。

実行可能ファイルへのマニフェストの埋め込みをサポートする SDK ユーティリティである mt.exe ツールをいじることができます。VB6 バイナリをビルドした後、手動で実行する必要があります。それは楽しくないし、忘れると大変なことになる。一般に、これは使用するのに楽しいツールではありません。ドキュメントは貧弱で、不完全で役に立たず、マニフェストに関する慢性的な問題です。

フォールバックは別個の app.exe.manifest ファイルであり、実行可能ファイルに埋め込まれたマニフェストが見つからない場合に Windows が次に探すものです。「app.exe」の名前を VB6 プログラムの名前に変更する必要があります。DLLではなくEXEです。これにより、VB6 DLL を登録する必要がなくなります。これは、プログラムを本当に reg-free で実行したい場合に、おそらく本当に必要なことです。不利な点は、間違った EXE である VB6 プログラムをデバッグするときに機能しないことです。VB6 インストール ディレクトリにある vb6.exe.manifest も必要です。

言うまでもなく、ここで VB6 を使いこなすのは非常に困難です。1998年にはタイムマシンがありませんでした.

于 2013-05-17T11:01:56.273 に答える