GenerateApplicationManifest 工作

產生 ClickOnce 應用程式資訊清單或原生資訊清單。 原生資訊清單在描述元件時,會定義元件的唯一身分識別,並識別組成元件的所有組件和檔案。 透過指出應用程式的進入點並指定應用程式的安全性層級之後,ClickOnce 應用程式資訊清單就可以擴充原生資訊清單。

參數

下表說明 GenerateApplicationManifest 工作的參數。

參數 描述
AssemblyName 選擇性的 String 參數。

針對產生的資訊清單指定組件識別的 Name 欄位。 如果未指定此參數,會從 EntryPointInputManifest 參數來推斷名稱。 如果無法建立名稱,工作便會擲回錯誤。
AssemblyVersion 選擇性的 String 參數。

針對產生的資訊清單指定組件識別的 Version 欄位。 如果未指定此參數,就會使用 "1.0.0.0" 的預設值。
ClrVersion 選擇性的 String 參數。

指定應用程式所需的最小 Common Language Runtime (CLR) 版本。 預設值是建置系統所使用的 CLR 版本。 如果工作要產生原生資訊清單,則會忽略此參數。
ConfigFile 選擇性的 ITaskItem[] 參數。

指定包含應用程式組態檔的項目。 如果工作要產生原生資訊清單,則會忽略此參數。
Dependencies 選擇性的 ITaskItem[] 參數。

指定項目清單,這份清單會為所產生的資訊清單定義一組相依組件。 每個項目都可以利用項目中繼資料進一步描述,以指出其他部署狀態和相依性的類型。 如需詳細資訊,請參閱項目中繼資料
Description 選擇性的 String 參數。

指定應用程式或元件的描述。
EntryPoint 選擇性的 ITaskItem[] 參數。

指定單一項目,以指出所產生資訊清單組件的進入點。

對於 ClickOnce 應用程式資訊清單,這個參數會指定應用程式執行時啟動的組件。
ErrorReportUrl 選擇性的 System.String 參數。

指定在 ClickOnce 安裝錯誤報告期間顯示於對話方塊中的網頁 URL。
FileAssociations 選擇性的 ITaskItem[] 參數。

指定與 ClickOnce 部署資訊清單建立關聯之一或多個檔案類型的清單。

檔案關聯只有在 .NET Framework 3.5 或更新版本設為目標時才有效。
Files 選擇性的 ITaskItem[] 參數。

要包含在資訊清單中的檔案。 指定每個檔案的完整路徑。
HostInBrowser 選擇性的 Boolean 參數。

如果為 true,表示應用程式是裝載於瀏覽器中 (與 WPF 網頁瀏覽器應用程式相同)。
IconFile 選擇性的 ITaskItem[] 參數。

表示應用程式圖示檔。 應用程式圖示會在產生的應用程式資訊清單中顯示,並在 [開始] 功能表和 [新增/移除程式] 對話方塊中使用。 如果未指定這項輸入,便會使用預設圖示。 如果工作要產生原生資訊清單,則會忽略此參數。
InputManifest 選擇性的 ITaskItem 參數。

指出要作為資訊清單產生器基底的輸入 XML 文件。 這可讓結構化資料 (例如應用程式安全性或自訂資訊清單定義) 能夠反映在輸出資訊清單中。 XML 文件中的根元素必須是 asmv1 命名空間中的組件節點。
IsolatedComReferences 選擇性的 ITaskItem[] 參數。

指定要在所產生資訊清單中隔離的 COM 元件。 這個參數支援可在「免註冊的 COM」部署中隔離 COM 元件的功能。 其運作方式是利用標準的 COM 註冊定義來自動產生資訊清單。 不過,必須在建置電腦上註冊 COM 元件,才能讓這項功能正常運作。
LauncherBasedDeployment 選擇性的 Boolean 參數。

針對 .NET Core 3.1、.NET 5 和更新版本建置時,將此參數設定為 True,以確保在建置應用程式主機可執行檔 apphost.exe 之後,應用程式可執行檔會重新命名為預期的可執行檔名稱。
ManifestType 選擇性的 String 參數。

指定要產生的資訊清單類型。 此參數的值如下:

- Native
- ClickOnce

如果未指定此參數,工作會預設為 ClickOnce
MaxTargetPath 選擇性的 String 參數。

指定 ClickOnce 應用程式部署中允許的檔案路徑長度上限。 如果指定這個值,則會根據這項限制來檢查應用程式中的每個檔案路徑長度。 任何超過限制的項目都會引發建置警告。 如果這項輸入未指定或為零,則不會執行任何檢查。 如果工作要產生原生資訊清單,則會忽略此參數。
OSVersion 選擇性的 String 參數。

指定應用程式所需的最小必要作業系統 (OS) 版本。 如果未指定此參數,則會使用值 「4.10.0.0」,這是 .NET Framework 的最低支援 OS。 如果工作是要產生原生資訊清單,則會忽略這項輸入。
OutputManifest 選擇性的 ITaskItem 輸出參數。

指定所產生的輸出資訊清單檔名稱。 如果未指定此參數,會從產生的資訊清單識別來推斷輸出檔的名稱。
Platform 選擇性的 String 參數。

指定應用程式的目標平台。 此參數的值如下:

- AnyCPU
- x86
- x64
- Itanium

如果未指定此參數,工作會預設為 AnyCPU
Product 選擇性的 String 參數。

指定應用程式的名稱。 如果未指定此參數,會從產生的資訊清單識別來推斷名稱。 此名稱可用來作為 [開始] 功能表上的捷徑名稱,而且是出現在 [新增或移除程式] 對話方塊中名稱的一部分。
Publisher 選擇性的 String 參數。

指定應用程式的發行者。 如果未指定此參數,會從已註冊使用者或產生的資訊清單識別來推斷名稱。 此名稱可用來作為 [開始] 功能表上的資料夾名稱,而且是出現在 [新增或移除程式] 對話方塊中名稱的一部分。
RequiresMinimumFramework35SP1 選擇性的 Boolean 參數。

如果為 true,則應用程式需要 .NET Framework 3.5 SP1 或更新版本。
TargetCulture 選擇性的 String 參數。

識別應用程式的文化特性,並為產生的資訊清單指定組件身分識別的 Language 欄位。 如果未指定此參數,則會假設應用程式不因文化特性而異。
TargetFrameworkMoniker 選擇性的 String 參數。

指定目標 Framework Moniker。
TargetFrameworkProfile 選擇性的 String 參數。

指定目標 Framework 設定檔。
TargetFrameworkSubset 選擇性的 String 參數。

指定要設為目標之 .NET Framework 子集的名稱。
TargetFrameworkVersion 選擇性的 String 參數。

指定專案的目標 .NET Framework。
TrustInfoFile 選擇性的 ITaskItem 參數。

表示指定應用程式安全性的 XML 文件。 XML 文件中的根項目必須是 asmv2 命名空間中的 trustInfo 節點。 如果工作要產生原生資訊清單,則會忽略此參數。
UseApplicationTrust 選擇性的 Boolean 參數。

如果為 true,則 ProductPublisherSupportUrl 屬性都會寫入應用程式資訊清單。

備註

除了上述所列的參數,此項工作還會繼承 GenerateManifestBase 類別中的參數,而該類別本身又繼承 Task 類別。 如需工作類別的參數清單,請參閱工作基底類別

如需如何使用 GenerateDeploymentManifest 工作的資訊,請參閱 GenerateApplicationManifest 工作

相依性和檔案的輸入可以進一步以項目中繼資料裝飾,以指定每個項目的其他部署狀態。

項目中繼資料

中繼資料名稱 描述
DependencyType 指出相依性是以應用程式或必要條件進行發行和安裝。 這項中繼資料可用於所有相依性,但不能用於檔案。 此中繼資料可用的值如下:

- Install
- Prerequisite

Install 是預設值。
AssemblyType 指出相依性為 Managed 或原生組件。 這項中繼資料可用於所有相依性,但不能用於檔案。 此中繼資料可用的值如下:

- Managed
- Native
- Unspecified

Unspecified 是預設值,表示資訊清單產生器將會自動決定組件類型。
Group 表示視需要下載額外檔案的群組。 群組名稱是由應用程式定義,並且可以是任何字串。 預設的空字串表示檔案不是下載群組的一部分。 不在群組中的檔案都是初始應用程式下載的一部分。 群組中的檔案只會在應用程式使用 System.Deployment.Application 明確要求時下載。

這項中繼資料可用於 IsDataFilefalse 的所有檔案,以及 DependencyTypeInstall 的所有相依性。
TargetPath 指定應該如何在產生的資訊清單中定義路徑。 這個屬性可用於所有檔案。 如果未指定此屬性,便會使用項目規格。 這個屬性可用於 DependencyType 值為 Install 的所有檔案和相依性。
IsDataFile Boolean 中繼資料值,指出檔案是否為資料檔案。 資料檔案的特殊性在於會在應用程式更新之間移轉。 這項中繼資料只可用於檔案。 False 為預設值。

範例 1

這個範例使用 GenerateApplicationManifest 工作來產生 ClickOnce 應用程式資訊清單,並使用 GenerateDeploymentManifest 工作來為具有單一組件的應用程式產生部署資訊清單。 然後使用 SignFile 工作為資訊清單簽章。

上述範例說明了產生資訊清單時可能發生的最簡單案例,其中 ClickOnce 資訊清單是針對單一程式所產生。 預設名稱和身分識別都是從資訊清單的組件推斷而來。

注意

在以下範例中,所有應用程式二進位檔都會預先建置,以便讓您專注於資訊清單產生的各個方面。 這個範例會產生能夠完整運作的 ClickOnce 部署。

注意

如需本範例中 SignFile 工作所使用之 Thumbprint 屬性的詳細資訊,請參閱 SignFile 工作

<Project DefaultTargets="Build"
    xmlns="http://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>

範例 2

這個範例使用 GenerateApplicationManifestGenerateDeploymentManifest 工作來產生 ClickOnce 應用程式,以及具有單一組件之應用程式的部署資訊清單,並指定資訊清單的名稱和身分識別。

除了明確指定資訊清單的名稱和身分識別之外,這個範例與前一個範例類似。 此外,這個範例已設定為線上應用程式,而非安裝的應用程式。

注意

在以下範例中,所有應用程式二進位檔都會預先建置,以便讓您專注於資訊清單產生的各個方面。 這個範例會產生能夠完整運作的 ClickOnce 部署。

注意

如需本範例中 SignFile 工作所使用之 Thumbprint 屬性的詳細資訊,請參閱 SignFile 工作

<Project DefaultTargets="Build"
    xmlns="http://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>

範例 3

這個範例使用 GenerateApplicationManifestGenerateDeploymentManifest 工作來產生 ClickOnce 應用程式,以及具有多個檔案和組件之應用程式的部署資訊清單。

注意

在以下範例中,所有應用程式二進位檔都會預先建置,以便讓您專注於資訊清單產生的各個方面。 這個範例會產生能夠完整運作的 ClickOnce 部署。

注意

如需本範例中 SignFile 工作所使用之 Thumbprint 屬性的詳細資訊,請參閱 SignFile 工作

<Project DefaultTargets="Build"
    xmlns="http://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>

範例 4

此範例使用 GenerateApplicationManifest 工作來產生應用程式 Test.exe 的原生資訊清單,並參考原生元件 Alpha.dll 和隔離的 COM 元件 Bravo.dll

此範例會產生 Test.exe.manifest,讓應用程式 XCOPY 可部署並利用「免註冊的 COM」。

注意

在以下範例中,所有應用程式二進位檔都會預先建置,以便讓您專注於資訊清單產生的各個方面。 這個範例會產生能夠完整運作的 ClickOnce 部署。

<Project DefaultTargets="Build" xmlns="http://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>

另請參閱