Share via


GenerateApplicationManifest 任务

更新:2007 年 11 月

生成 ClickOnce 应用程序清单或本机清单。本机清单描述组件的方法是:为组件定义一个唯一的标识,并标识组成组件的所有程序集和文件。ClickOnce 应用程序清单通过指示应用程序的入口点并指定应用程序的安全级别来扩展本机清单。

参数

下表描述了 GenerateApplicationManifest 任务的参数。

参数

说明

AssemblyName

可选的 String 参数。

为生成的清单指定程序集标识的 Name 字段。如果未指定此参数,将从 EntryPointInputManifest 参数推断出该名称。如果无法创建任何名称,该任务将引发错误。

AssemblyVersion

可选的 String 参数。

为生成的清单指定程序集标识的 Version 字段。如果未指定此参数,则使用默认值“1.0.0.0”。

ClrVersion

可选的 String 参数。

指定应用程序所需的公共语言运行库 (CLR) 的最低版本。默认值是生成系统正在使用的 CLR 版本。如果任务正在生成本机清单,将忽略此参数。

ConfigFile

可选的 ITaskItem[] 参数。

指定哪个项包含应用程序配置文件。如果任务正在生成本机清单,将忽略此参数。

Dependencies

可选的 ITaskItem[] 参数。

指定为生成的清单定义一组依赖程序集的项列表。可以通过项元数据对每个项进行进一步的描述,以指示更多部署状态和依赖项类型。有关更多信息,请参见下面的“项元数据”部分。

Description

可选的 String 参数。

指定应用程序或组件的说明。

EntryPoint

可选的 ITaskItem[] 参数。

指定用于指示生成的清单程序集的入口点的单个项。

对于 ClickOnce 应用程序清单,此参数指定在应用程序运行时启动的程序集。

Files

可选的 ITaskItem[] 参数。

要包含在清单中的文件。指定每个文件的完整路径。

IconFile

可选的 ITaskItem[] 参数。

指示应用程序图标文件。应用程序图标在生成的应用程序清单中表示,可用于“开始”菜单和“添加/删除程序”对话框。如果未指定此输入,将使用默认图标。如果任务正在生成本机清单,将忽略此参数。

InputManifest

可选的 ITaskItem 参数。

指示要用作清单生成器的基础的输入 XML 文档。这样,结构数据(如应用程序安全或自定义清单定义)就可以反映在输出清单中。XML 文档中的根元素必须是 asmv1 命名空间中的程序集节点。

IsolatedComReferences

可选的 ITaskItem[] 参数。

指定要在生成的清单中隔离的 COM 组件。此参数支持隔离 COM 组件的功能,以实现“免注册 COM”部署。它的工作方式是通过标准 COM 注册定义来自动生成清单。但是,为保证正常工作,必须在生成计算机上注册这些 COM 组件。

ManifestType

可选的 String 参数。

指定要生成哪种类型的清单。此参数可以具有下列值:

  • Native

  • ClickOnce

如果未指定此参数,则该任务默认为 ClickOnce

MaxTargetPath

可选的 String 参数。

指定 ClickOnce 应用程序部署中文件路径的最大允许长度。如果指定此值,将会对照此限制检查应用程序中每个文件路径的长度。超出该限制的任何项都会引发一个生成警告。如果此输入未指定或者为零,那么将不执行检查。如果任务正在生成本机清单,将忽略此参数。

OSVersion

可选的 String 参数。

指定应用程序所需的最低操作系统 (OS) 版本。例如,值“5.1.2600.0”表示操作系统为 Windows XP。如果未指定此参数,将使用值“4.10.0.0”,这表示 Windows 98 Second Edition,即 .NET Framework 支持的最低操作系统版本。如果任务正在生成本机清单,将忽略此输入。

OutputManifest

可选的 ITaskItem 输出参数。

指定生成的输出清单文件的名称。如果未指定此参数,将从生成的清单的标识中推断出该输出文件的名称。

Platform

可选的 String 参数。

指定应用程序的目标平台。此参数可以具有下列值:

  • AnyCPU

  • x86

  • x64

  • Itanium

如果未指定此参数,则该任务默认为 AnyCPU

TargetCulture

可选的 String 参数。

标识应用程序的区域性,并为生成的清单指定程序集标识的 Language 字段。如果未指定此参数,则假定该应用程序不依赖于区域性。

TrustInfoFile

可选的 ITaskItem 参数。

指示用于指定应用程序安全性的 XML 文档。XML 文档中的根元素必须是 asmv2 命名空间中的 trustInfo 节点。如果任务正在生成本机清单,将忽略此参数。

备注

可以使用项元数据对依赖项和文件的输入进行进一步的修饰,以便为每个项指定更多部署状态。

项元数据

元数据名称

说明

DependencyType

指示依赖项是随应用程序一起发布并安装还是一个必备组件。此元数据对所有依赖项均有效,但不可用于文件。可用于此元数据的值有:

  • Install

  • Prerequisite

Install 是默认值。

AssemblyType

指示依赖项是托管程序集还是本机程序集。此元数据对所有依赖项均有效,但不可用于文件。可用于此元数据的值有:

  • Managed

  • Native

  • Unspecified

Unspecified 是默认值,指示清单生成器将自动确定程序集类型。

Group

指示用于按需下载其他文件的组。组名由应用程序定义,可以是任何字符串。默认值是空字符串,这表示该文件不是下载组的一部分。不在组中的文件是初始应用程序下载的一部分。组中包含的文件只有当应用程序使用 System.Deployment.Application 显式请求时才下载。

此元数据对于 IsDataFile 为 false 的所有文件以及 DependencyTypeInstall 的所有依赖项均有效。

TargetPath

指定应如何在生成的清单中定义该路径。此属性对所有文件均有效。如果未指定此属性,将使用项规范。此属性对于所有文件以及 DependencyType 值为 Install 的依赖项均有效。

IsDataFile

指示文件是否为数据文件的 Boolean 元数据值。数据文件的特殊性在于它可以在应用程序更新之间迁移。此元数据仅对文件有效。False 是默认值。

示例

此示例针对具有单个程序集的应用程序,使用 GenerateApplicationManifest 任务生成 ClickOnce 应用程序清单,使用 GenerateDeploymentManifest 任务生成部署清单。然后,使用 SignFile 任务对这些清单进行签名。

这阐释了可能的最为简单的清单生成方案,该方案为单个程序生成了 ClickOnce 清单。从清单的程序集可以推断出默认的名称和标识。

说明:

在下面的示例中,为将重点放在清单生成方面上,预先生成了所有的应用程序二进制文件。此示例将产生一个完全正常工作的 ClickOnce 部署。

说明:

有关在此示例的 SignFile 任务中使用的 Thumbprint 属性的更多信息,请参见 SignFile 任务

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <EntryPoint Include="SimpleWinApp.exe" />
    </ItemGroup>

    <PropertyGroup>
        <Thumbprint>
             <!-- Insert generated thumbprint here -->
        </Thumbprint>
    </PropertyGroup>

    <Target Name="Build">

        <GenerateApplicationManifest
            EntryPoint="@(EntryPoint)">
            <Output
                ItemName="ApplicationManifest"
                TaskParameter="OutputManifest"/>
        </GenerateApplicationManifest>

        <GenerateDeploymentManifest
            EntryPoint="@(ApplicationManifest)">
            <Output
                ItemName="DeployManifest"
                TaskParameter="OutputManifest"/>
        </GenerateDeploymentManifest>

        <SignFile
            CertificateThumbprint="$(Thumbprint)"
            SigningTarget="@(ApplicationManifest)"/>

        <SignFile
            CertificateThumbprint="$(Thumbprint)"
            SigningTarget="@(DeployManifest)"/>

    </Target>
</Project>

此示例针对具有单个程序集的应用程序,分别使用 GenerateApplicationManifestGenerateDeploymentManifest 任务生成 ClickOnce 应用程序清单和部署清单,并指定了清单的名称和标识。

此示例除了显式指定清单的名称和标识之外,其他方面均与上一个示例类似。此外,此示例还被配置为联机应用程序,而不是安装的应用程序。

说明:

在下面的示例中,为将重点放在清单生成方面上,预先生成了所有的应用程序二进制文件。此示例将产生一个完全正常工作的 ClickOnce 部署。

说明:

有关在此示例的 SignFile 任务中使用的 Thumbprint 属性的更多信息,请参见 SignFile 任务

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <EntryPoint Include="SimpleWinApp.exe" />
    </ItemGroup>

    <PropertyGroup>
        <Thumbprint>
             <!-- Insert generated thumbprint here -->
        </Thumbprint>
    </PropertyGroup>

    <Target Name="Build">

        <GenerateApplicationManifest
            AssemblyName="SimpleWinApp.exe"
            AssemblyVersion="1.0.0.0"
            EntryPoint="@(EntryPoint)"
            OutputManifest="SimpleWinApp.exe.manifest">
            <Output
                ItemName="ApplicationManifest"
                TaskParameter="OutputManifest"/>
        </GenerateApplicationManifest>

        <GenerateDeploymentManifest
                AssemblyName="SimpleWinApp.application"
                AssemblyVersion="1.0.0.0"
                EntryPoint="@(ApplicationManifest)"
                Install="false"
                OutputManifest="SimpleWinApp.application">
                <Output
                    ItemName="DeployManifest"
                    TaskParameter="OutputManifest"/>
        </GenerateDeploymentManifest>

        <SignFile
            CertificateThumbprint="$(Thumbprint)"
            SigningTarget="@(ApplicationManifest)"/>

        <SignFile
            CertificateThumbprint="$(Thumbprint)"
            SigningTarget="@(DeployManifest)"/>

    </Target>
</Project>

此示例针对具有多个文件和程序集的应用程序,分别使用 GenerateApplicationManifestGenerateDeploymentManifest 任务生成 ClickOnce 应用程序清单和部署清单。

说明:

在下面的示例中,为将重点放在清单生成方面上,预先生成了所有的应用程序二进制文件。此示例将产生一个完全正常工作的 ClickOnce 部署。

说明:

有关在此示例的 SignFile 任务中使用的 Thumbprint 属性的更多信息,请参见 SignFile 任务

<Project DefaultTargets="Build"
    xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <EntryPoint Include="SimpleWinApp.exe" />
    </ItemGroup>

    <PropertyGroup>
        <Thumbprint>
             <!-- Insert generated thumbprint here -->
        </Thumbprint>
        <DeployUrl>
            <!-- Insert the deployment URL here -->
        </DeployUrl>
        <SupportUrl>
            <!-- Insert the support URL here -->
        </SupportUrl>
    </PropertyGroup>

    <Target Name="Build">

    <ItemGroup>
        <EntryPoint Include="SimpleWinApp.exe"/>
        <Dependency Include="ClassLibrary1.dll">
            <AssemblyType>Managed</AssemblyType>
            <DependencyType>Install</DependencyType>
        </Dependency>
        <Dependency Include="ClassLibrary2.dll">
            <AssemblyType>Managed</AssemblyType>
            <DependencyType>Install</DependencyType>
            <Group>Secondary</Group>
        </Dependency>
        <Dependency Include="MyAddIn1.dll">
            <AssemblyType>Managed</AssemblyType>
            <DependencyType>Install</DependencyType>
            <TargetPath>Addins\MyAddIn1.dll</TargetPath>
        </Dependency>
        <Dependency Include="ClassLibrary3.dll">
            <AssemblyType>Managed</AssemblyType>
            <DependencyType>Prerequisite</DependencyType>
        </Dependency>

        <File Include="Text1.txt">
            <TargetPath>Text\Text1.txt</TargetPath>
            <Group>Text</Group>
        </File>
        <File Include="DataFile1.xml ">
            <TargetPath>Data\DataFile1.xml</TargetPath>
            <IsDataFile>true</IsDataFile>
        </File>

        <IconFile Include="Heart.ico"/>
        <ConfigFile Include="app.config">
            <TargetPath>SimpleWinApp.exe.config</TargetPath>
        </ConfigFile>
        <BaseManifest Include="app.manifest"/>
    </ItemGroup>

    <Target Name="Build">

        <GenerateApplicationManifest
            AssemblyName="SimpleWinApp.exe"
            AssemblyVersion="1.0.0.0"
            ConfigFile="@(ConfigFile)"
            Dependencies="@(Dependency)"
            Description="TestApp"
            EntryPoint="@(EntryPoint)"
            Files="@(File)"
            IconFile="@(IconFile)"
            InputManifest="@(BaseManifest)"
            OutputManifest="SimpleWinApp.exe.manifest">
            <Output
                ItemName="ApplicationManifest"
                TaskParameter="OutputManifest"/>
        </GenerateApplicationManifest>

        <GenerateDeploymentManifest
            AssemblyName="SimpleWinApp.application"
            AssemblyVersion="1.0.0.0"
            DeploymentUrl="$(DeployToUrl)"
            Description="TestDeploy"
            EntryPoint="@(ApplicationManifest)"
            Install="true"
            OutputManifest="SimpleWinApp.application"
            Product="SimpleWinApp"
            Publisher="Microsoft"
            SupportUrl="$(SupportUrl)"
            UpdateEnabled="true"
            UpdateInterval="3"
            UpdateMode="Background"
            UpdateUnit="weeks">
            <Output
                ItemName="DeployManifest"
                TaskParameter="OutputManifest"/>
        </GenerateDeploymentManifest>

        <SignFile
            CertificateThumbprint="$(Thumbprint)"
            SigningTarget="@(ApplicationManifest)"/>

        <SignFile
            CertificateThumbprint="$(Thumbprint)"
            SigningTarget="@(DeployManifest)"/>

    </Target>
</Project>

此示例使用 GenerateApplicationManifest 任务为应用程序 Test.exe 生成本机清单,并引用本机组件 Alpha.dll 和独立的 COM 组件 Bravo.dll。

此示例产生 Test.exe.manifest,从而使得该应用程序可以借助“免注册 COM”进行 XCOPY 部署。

说明:

在下面的示例中,为将重点放在清单生成方面上,预先生成了所有的应用程序二进制文件。此示例将产生一个完全正常工作的 ClickOnce 部署。

<Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <File Include="Test.exe" />
        <Dependency Include="Alpha.dll">
            <AssemblyType>Native</AssemblyType>
            <DependencyType>Install</DependencyType>
        </Dependency>
        <ComComponent Include="Bravo.dll" />
    </ItemGroup>

    <Target Name="Build">
        <GenerateApplicationManifest
            AssemblyName="Test.exe"
            AssemblyVersion="1.0.0.0"
            Dependencies="@(Dependency)"
            Files="@(File)"
            IsolatedComReferences="@(ComComponent)"
            ManifestType="Native">
            <Output
                ItemName="ApplicationManifest"
                TaskParameter="OutputManifest"/>
        </GenerateApplicationManifest>

    </Target>
</Project>

请参见

概念

MSBuild 任务

参考

GenerateDeploymentManifest 任务

SignFile 任务

其他资源

MSBuild 任务参考