web-dev-qa-db-ja.com

アセンブリマニフェストを.NET実行可能ファイルに追加する方法は?

.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で設計およびテストされたことを宣言できます。Windows7のバグに依存し続ける必要があります。

    _<!-- 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のプロジェクトにアセンブリマニフェストを追加するにはどうすればよいですか?

:ソリューションはソース管理と複数の開発者がいる環境で動作する必要があります作業)。

ボーナスチャッター


Update:Michael Foxは、プロジェクトプロパティダイアログを使用してアセンブリマニフェストを含めることができると示唆していますが、を示していませんどこ

enter image description here


更新:試したこと:

  • プロジェクトのプロパティ画面から、Applicationを選択します。ラジオオプションアイコンとマニフェストを選択します。 Manifestの下で、デフォルトオプションの_Embed manifest with default settings_のままにします。

enter image description here

設定ではなく、default設定でマニフェストを埋め込むため、機能しません。

  • Manifestで、コンボオプションを_Create application without a manifest_に変更します。

    enter image description here

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

  • Resourcesの下でResource Fileラジオオプションを選択します:

    enter image description here

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

  • Resourcesで、Resource Fileラジオオプションを選択し、パスを入力しますアセンブリマニフェストXMLファイル:

enter image description here

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

enter image description here

  • Resourcesで、Resource Fileラジオオプションを選択し、パスを入力しますリソーススクリプトファイルへ:

enter image description here

Visual Studioがリソーススクリプトを提示するとチョークするため動作しません

enter image description here

  • _AssemblyManifest.xml_をプロジェクトに追加し、Manifestコンボボックスで探します:

    enter image description here

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

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

30
Ian Boyd

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

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

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


スクリーンショットを使用した同様の手順は、MSDNの Managed Applications as DPI-Aware から解除されました:

  1. ソリューションエクスプローラーで、プロジェクトを右クリックし、Addをポイントして、New Itemをクリックします。

  2. Add New Itemダイアログボックスで、Application Manifest Fileを選択し、Add。 app.manifestファイルが表示されます。

    enter image description here

  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. ソリューションエクスプローラーで、projectを右クリックし、Propertiesをクリックして、app.manifestが使用されます。

    enter image description here

  5. これで、アプリケーションは「Windows用に設計する」必要があると明示され、

    • ファイルとレジストリの仮想化を無効にします
    • アプリケーションのDWMスケーリングを無効にします
    • windows 7およびWindows Vistaで設計およびテストされたことを発表します
    • コモンコントロールライブラリバージョン6に依存します(コモンコントロールによる視覚スタイルの使用を有効にします)
26
Cody Gray

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

ただし、私が:

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

マニフェストファイルは適切に埋め込まれています。これは、リソースビューにDLLをロードすることで確認できます。 。

6
Mozzis

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

2
Michael Fox