33

アセンブリ マニフェストを .NET 実行可能ファイルに追加するにはどうすればよいですか?


アセンブリ マニフェストは、リソース タイプRT_MANIFEST(24) の .NET ポータブル実行可能ファイル (PE) に追加される XML ファイルです。

アセンブリ マニフェストは、実行可能ファイルに関する多くのことを宣言するために使用されます。

  • 私は優れた開発者であるため、DPI スケーリングを無効にしたい場合:

    <!-- We are high-dpi aware on Windows Vista -->
    <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
       <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
          <dpiAware>true</dpiAware>
       </asmv3:windowsSettings>
    </asmv3:application>
    
  • Windows 7 で設計およびテストされたことを宣言できます。また、Windows 7 のバグに依存し続ける必要があります。

    <!-- We were designed and tested on Windows 7 -->
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
       <application>
          <!--The ID below indicates application support for Windows 7 -->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
       </application>
    </compatibility>
    
  • 私は優れた開発者であり、ファイルとレジストリの仮想化は必要ないと宣言できます

    <!-- Disable file and registry virtualization -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
       <security>
          <requestedPrivileges>
             <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
          </requestedPrivileges>
       </security>
    </trustInfo>
    
  • Microsoft Common Controlsライブラリの特定のバージョン 6 に依存していると宣言できます。

    <!-- Dependency on Common Controls version 6 -->
    <dependency>
       <dependentAssembly>
          <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="6595b64144ccf1df"
                language="*"/>
       </dependentAssembly>
    </dependency>
    
  • 特定のバージョンの GDI+ に依存していると宣言できます。

    <dependency>
       <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.Windows.GdiPlus" version="1.0.0.0" processorArchitecture="x86"
                publicKeyToken="6595b64144ccf1df" language="*" />
       </dependentAssembly>
    </dependency>
    

昔は、リソース スクリプトファイル ( *.rc)を作成していました。

wumpa.rc

   1    24    AssemblyManifest.xml

そのファイルをプロジェクトに追加すると、コンパイラはファイルをコンパイルし.rcます。最終的な実行可能イメージにリソースを含めます。

ただし、Visual Studio 2010 には、リソース スクリプト ファイルをプロジェクトに追加する方法がないようです

Visual Studio 2010 のプロジェクトにリソース スクリプトを追加するにはどうすればよいですか?

Visual Studio 2010 のプロジェクトにアセンブリ マニフェストを追加するにはどうすればよいですか?

: どのソリューションも、ソース管理と複数の開発者がいる環境で機能する必要があります (たとえば、おそらくインストールされていないバイナリへのパスをハードコーディングすると、ビルドが壊れて機能しなくなります)。

ボーナスおしゃべり


更新: マイケル フォックスは、プロジェクト プロパティ ダイアログを使用してアセンブリ マニフェストを含めることを提案していますが、どこにあるかは示していません。

ここに画像の説明を入力


更新:私が試したこと:

  • プロジェクトのプロパティ画面から、Applicationを選択します。ラジオ オプションIcon and Manifest を選択します。[マニフェスト] の下で、次のデフォルト オプションをそのままにしますEmbed manifest with default settings

ここに画像の説明を入力

私の設定ではなく、デフォルト設定のマニフェストが埋め込まれているため、機能しません。

  • [マニフェスト]で、コンボ オプションを次のように変更しますCreate application without a manifest

    ここに画像の説明を入力

    マニフェストが埋め込まれていないため機能しません

  • [リソース] の下で、[リソース ファイル] ラジオ オプションを選択します。

    ここに画像の説明を入力

    アセンブリ マニフェスト (またはアセンブリ マニフェストを含むリソース スクリプト) を選択できないため、機能しません

  • [リソース]で、[リソース ファイル] ラジオ オプションを選択し、アセンブリ マニフェスト XML ファイルへのパスを入力します。

ここに画像の説明を入力

アセンブリ マニフェストが表示されると Visual Studio がチョークするため、機能しません

ここに画像の説明を入力

  • [リソース]で、[リソース ファイル] ラジオ オプションを選択し、リソース スクリプト ファイルへのパスを入力します。

ここに画像の説明を入力

リソース スクリプトが表示されると Visual Studio がチョークするため、機能しません

ここに画像の説明を入力

  • をプロジェクトに追加し、[マニフェスト] コンボ ボックスAssemblyManifest.xmlで探します。

    ここに画像の説明を入力

    アセンブリ マニフェスト ファイルがオプションとしてリストされていないため、機能しません

他にもスクリーンショットを保存できるものがたくさんあります (ソリューションに .rc ファイルを追加し、ドロップダウンで探して、「マニフェストなし」を選択し、wumpa.rcビルド アクションをさまざまなものに変更.rcし、別のリソース コンパイラを使用してファイルをビルドし、手動で、または pre-build/msbuild ステップで、その.resファイルをリソースとして選択します)。質問に余分なバルクを追加するのをやめて、答えを期待します。

4

3 に答える 3

27

アプリケーションのマニフェストにカスタム情報を追加する場合は、次の手順に従います。

  1. ソリューション エクスプローラーでプロジェクトを右クリックします。
  2. 「新しいアイテムを追加」をクリックします。
  3. 「アプリケーション マニフェスト ファイル」を選択します。

これにより、 という名前のファイルがプロジェクトに追加さapp.manifestれ、必要に応じて開いて変更できます。


MSDNの Declaring Managed Applications As DPI-Awareから取り上げた同様の手順とスクリーンショット:

  1. ソリューション エクスプローラーでプロジェクトを右クリックし、 [追加] をポイントして、[新しい項目] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[アプリケーション マニフェスト ファイル] を選択し、[追加] をクリックします。app.manifest ファイルが表示されます。

    ここに画像の説明を入力

  3. 次のテキストをコピーしてapp.manifestファイルに貼り付け、保存します。

    <?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" 
                    xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
                    xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
      <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
    
        <!-- Disable file and registry virtualization. -->
        <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
          <security>
            <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
             <requestedExecutionLevel level="asInvoker" uiAccess="false" />
             <!--  <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
                   <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
                   <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
             -->
            </requestedPrivileges>
          </security>
        </trustInfo>
    
        <!-- We are high-dpi aware on Windows Vista -->
        <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
          <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true</dpiAware>
          </asmv3:windowsSettings>
        </asmv3:application>
    
        <!-- Declare that we were designed to work with Windows Vista and Windows 7-->
        <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
          <application>
            <!--The ID below indicates application support for Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
            <!--The ID below indicates application support for Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
          </application>
        </compatibility>
    
        <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
        <dependency>
          <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
          </dependentAssembly>
        </dependency>
    
      </asmv1:assembly>
    
  4. ソリューション エクスプローラーでプロジェクトを右クリックし、 [プロパティ] をクリックして、 app.manifestが使用されていることを確認します。

    ここに画像の説明を入力

  5. あなたのアプリケーションは、「Windows 向けに設計されている」ことが必要であることが明らかになりました。

    • ファイルとレジストリの仮想化を無効にします
    • アプリケーションの DWM スケーリングを無効にします
    • Windows 7 および Windows Vista で設計およびテストされたことを発表します。
    • コモン コントロール ライブラリ バージョン 6 に依存します (コモン コントロールによるビジュアル スタイルの使用を有効にします)。
于 2012-01-12T23:53:35.340 に答える
6

Visual Studio 2010 Professional Service Pack 1 がインストールされています。Windows 7 Ultimate 64 ビットで実行しています。これらの手順に従うと、プロジェクト プロパティのリソース ブロックに「デフォルト設定でマニフェストを埋め込む」と表示され、オプションも無効になります。リソース ビューで DLL を開いて確認したところ、ビルド時にマニフェストが DLL に埋め込まれません。

ただし、次の場合:

  1. ソリューション エクスプローラーで、追加された app.manifest ファイルを見つけます。
  2. 右クリックして [プロパティ] を選択します
  3. Build Action プロパティを「None」から「Embedded Resource」に変更します
  4. 再構築

マニフェスト ファイルが正しく埋め込まれていることを確認するには、DLL をリソース ビューにロードします。アプリケーションのプロパティのマニフェスト設定は、「既定の設定でマニフェストを埋め込む」と表示され、無効のままです。

于 2012-08-02T14:32:13.997 に答える
2

Visual Studio 2008 では、これは [プロジェクト プロパティ] ウィンドウで実行できます。プロジェクトを右クリックしてプロパティを選択し、アプリケーション タブでマニフェストを選択できます。最初にプロジェクトに追加する必要がありますが、既存のファイルを追加することで簡単に行うことができます。

于 2011-11-15T19:26:37.920 に答える