在承载 DLL、扩展或控制面板的应用程序中启用程序集

如果应用程序托管第三方 DLL、扩展、插件或控制面板,则可能需要在应用程序中启用程序集,而无需为托管组件启用此程序集。 当托管组件需要更改代码才能使用程序集时,可能会发生这种情况。 作为应用程序开发人员,你可能无法对这些第三方组件进行更改。 在这种情况下,应按照本节中所述的过程进行操作,以便应用程序可以使用程序集,而不会影响托管组件。

  • 若要在应用程序中启用程序集而不影响任何托管 DLL、扩展、插件或控制面板,应将描述应用程序对程序集的依赖关系的清单作为资源包含在应用程序中。 未通过程序集启用的托管组件不应包含描述此依赖项的清单。
  • 若要在应用程序及其托管的 DLL、扩展、插件或控制面板中启用程序集,请将清单作为资源包含在应用程序及其托管组件中。 应用程序和托管组件中包含的清单应分别描述对程序集的依赖关系。 通常,应用程序开发人员将清单添加到应用程序,托管组件开发人员将清单添加到 DLL、扩展、插件或控制面板。

以下方法可用于将清单添加到应用程序或托管组件(DLL、扩展、插件或控制面板)。

在应用程序或托管组件中启用程序集。

  1. 创作一个清单,描述应用程序或扩展对程序集的依赖关系。

    例如,可以通过复制以下示例清单并替换 assemblyIdentityprocessorArchitecturedescription 的正确值来创建“YourApplication”的清单。 如果在 32 位平台上构建,请将 processorArchitecture 的值设置为 x86;如果构建在 64 位平台上,请将 processorArchitecture 的值设置为 ia64。 description 元素包含应用程序的选项说明。 有关清单格式的详细信息,请参阅 应用程序清单

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="x86"
        name="YourCompanyName.YourDivision.YourApp"
        type="win32"
    />
    <description>Your app description here</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Proseware.Research.SampleAssembly"
                version="6.0.0.0"
                processorArchitecture="X86"
                publicKeyToken="0000000000000000"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  2. 在 id 2 类型的应用程序或扩展中创建资源RT_MANIFEST。

    例如,如果应用程序的名称为 YourApp,则应用程序应包含以下项:

    #define MANIFEST_RESOURCE_ID 2
    MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.manifest"
    
  3. 使用 -DISOLATION_AWARE_ENABLED 标志编译应用程序,或在#include“Windows.h”语句之前插入此语句。 对于具有多个模块的应用程序,所有模块都需要 -DISOLATION_AWARE_ENABLED 标志。

    #define ISOLATION_AWARE_ENABLED 1
    
  4. 测试以确保应用程序使用的程序集在应用程序和托管组件中正常工作。

有关将程序集添加到没有扩展的应用程序的详细信息,请参阅 在不使用扩展的应用程序中启用程序集