web-dev-qa-db-ja.com

C#-マニフェストファイルが必要ですか?

アプリケーションを公開するときに作成される2つのマニフェストファイルが必要かどうか知りたいです。それらを削除すると機能します。それらが必要な場合、私はそれらを埋め込むことを試みました(プロジェクト>アプリケーション>デフォルト設定でマニフェストを埋め込む)が、それらはまだ外部です。

それらは: (appname).exe.manifestおよび(appname).application

22
Mirek

マニフェストファイルには、アプリケーションの実行方法が記述されています。から [〜#〜] msdn [〜#〜]

すべてのアセンブリには、静的か動的かに関係なく、アセンブリ内の要素が互いにどのように関連しているかを説明するデータのコレクションが含まれています。アセンブリマニフェストには、このアセンブリメタデータが含まれています。アセンブリマニフェストには、アセンブリのバージョン要件とセキュリティIDを指定するために必要なすべてのメタデータと、アセンブリのスコープを定義し、リソースとクラスへの参照を解決するために必要なすべてのメタデータが含まれています。アセンブリマニフェストは、Microsoft中間言語(MSIL)コードを含むPEファイル(.exeまたは.dll)、またはアセンブリマニフェスト情報のみを含むスタンドアロンPEファイルのいずれかに保存できます。

したがって、特にVista以降でアプリケーションをデフォルトで昇格して実行する場合は、それらを削除することはおそらく間違ったことです。

ここ は、アプリケーションにマニフェストを埋め込むために使用されるmtツールの使用に関するMSDNの詳細です。

また、 非常に興味深い問題 Vistaでのマニフェストのキャッシュに関して、それ以降は本当の落とし穴のように見えます。

16
Jeremy McGee

また、VS2003が使用されていたときに、コントロールをXPインターフェイスのように見せたい場合、マニフェストには、と一緒に使用される適切なバージョン6.xの共通コントロールが含まれます。アプリケーションを使用すると、GUIは古い不格好なWindows 2000コントロールの代わりに、「XPのルックアンドフィールを更新しました」を取得します。そのため、マニフェストをリソースとして埋め込むことができるため、マニフェストファイルを持ち歩く必要はありません。 (わかりました、それは非常に小さなファイルです)しかし、それにもかかわらず、それはアプリケーション配布をよりきれいにします。

また、.NET 1.1ランタイム(2.0以降で修正されました)にバグがあり、アプリケーションでマニフェストが使用されている場合、GUIを更新してXPルックアンドフィール。当時の回避策は、Application.Run(new form());を実行する前にApplication.DoEventsを呼び出すことでした。

現在、VistaとWin 7では、マニフェストを使用してUACを回避するための昇格されたアクセス許可を指定し、Vista/Win7がUACダイアログボックスをポップアップする可能性を最小限に抑えています。

6
t0mm13b

必要です 目的のために

アセンブリのバージョン要件とセキュリティID、およびアセンブリのスコープを定義し、リソースとクラスへの参照を解決するために必要なすべてのメタデータを指定する

1
Graviton