这就是我们如何使用 TeamBuild 为多种环境构建 ClickOnce 应用程序
你可以在这里阅读我原来的博文
这是您从 TeamBuild 项目文件中调用 ClickOnce 构建的方式(添加换行符以提高可读性):
<Msbuild
Projects="$(SolutionRoot)\ConfigFiles\BuildClickOnce.targets"
Targets="BuildClickOnce"
Properties="SourceDir=$(SourceDir);PublishDir=$(PublishDir); ClickOnceAppName=$(ClickOnceAppName);ClickOnceExeFile=$(ClickOnceExeFile); ClickOnceProduct=$(ClickOnceProduct);Company=$(Company); ClickOnceDescription=$(ClickOnceDescription);ClickOnceUrl=$(ClickOnceUrl); VersionNumber=$(VersionNumber);SigningCert=$(SigningCert); SigningCertPassword=$(SigningCertPassword)"
/>
对于您希望使用的每个环境或配置更改。您可以在下面找到 BuildClickOnce.targets 文件(为便于阅读添加了换行符):
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\SDC\Microsoft.Sdc.Common.tasks"/>
<Target Name="BuildClickOnce" DependsOnTargets="">
<PropertyGroup>
<ClickOnceApplicationUrl>$(ClickOnceUrl)$(ClickOnceAppName).application</ClickOnceApplicationUrl>
<AppPublishDir>$(PublishDir)</AppPublishDir>
<SdkPath>C:\Program Files\Microsoft SDKs\Windows\v6.0A</SdkPath>
</PropertyGroup>
<BuildStep
TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Message="Buildning $(ClickOnceAppName) ClickOnce version: $(VersionNumber)">
<Output TaskParameter="Id" PropertyName="StepId" />
</BuildStep>
<CallTarget Targets="UpdateWebPage" />
<!--
************************************************
Generate application manifest
************************************************
-->
<Exec
Command="mage.exe -New Application -TrustLevel FullTrust -ToFile "$(AppPublishDir)\$(ClickOnceExeFile).manifest" -Name "$(ClickOnceAppName)" -Version "$(VersionNumber)" -FromDirectory "$(AppPublishDir)""
WorkingDirectory="$(SdkPath)\Bin"/>
<!--
************************************************
Signing application manifest
************************************************
-->
<Exec Condition="'$(SigningCertPassword)'==''"
Command="mage.exe -Sign "$(AppPublishDir)\$(ClickOnceExeFile).manifest" -CertFile "$(SigningCert)""
WorkingDirectory="$(SdkPath)\Bin" />
<Exec Condition="'$(SigningCertPassword)'!=''"
Command="mage.exe -Sign "$(AppPublishDir)\$(ClickOnceExeFile).manifest" -CertFile "$(SigningCert)" -Password "$(SigningCertPassword)""
WorkingDirectory="$(SdkPath)\Bin"/>
<!--
************************************************
Renaming source files to .deploy
************************************************
-->
<ItemGroup>
<SourceFilesToRename Include="$(AppPublishDir)\**\*.*" Exclude="$(AppPublishDir)\*.manifest;$(AppPublishDir)\*.htm"/>
<SourceFilesToDelete Include="$(AppPublishDir)\**\*.*" Exclude="$(AppPublishDir)\*.application;$(AppPublishDir)\*.manifest;$(AppPublishDir)\*.htm"/>
</ItemGroup>
<Copy
SourceFiles="@(SourceFilesToRename)"
DestinationFiles="@(SourceFilesToRename->'$(AppPublishDir)\%(RecursiveDir)%(Filename)%(Extension).deploy')"
/>
<Delete Files="@(SourceFilesToDelete)"/>
<!--
************************************************
Generating deployment manifest
************************************************
-->
<GenerateDeploymentManifest
MapFileExtensions="true"
AssemblyName="$(ClickOnceAppName).application"
AssemblyVersion="$(VersionNumber)"
MinimumRequiredVersion="$(VersionNumber)"
DeploymentUrl="$(ClickOnceApplicationUrl)"
Description="$(ClickOnceDescription)"
Product="$(ClickOnceProduct)"
Publisher="$(Company)"
SupportUrl="$(SupportUrl)"
EntryPoint="$(AppPublishDir)\$(ClickOnceExeFile).manifest"
Install="true"
UpdateEnabled="true"
UpdateMode="Foreground"
OutputManifest="$(PublishDir)\$(ClickOnceAppName).application"/>
<!--
************************************************
Signing application manifest
************************************************
-->
<Exec Condition="'$(SigningCertPassword)'==''"
Command="mage.exe -Sign "$(PublishDir)\$(ClickOnceAppName).application" -CertFile "$(SigningCert)""
WorkingDirectory="$(SdkPath)\bin"/>
<Exec Condition="'$(SigningCertPassword)'!=''"
Command="mage.exe -Sign "$(PublishDir)\$(ClickOnceAppName).application" -CertFile "$(SigningCert)" -Password "$(SigningCertPassword)""
WorkingDirectory="$(SdkPath)\bin"/>
<!--
************************************************
Generating Bootstrapper
************************************************
-->
<ItemGroup>
<BootstrapperFile Include="Microsoft.Net.Framework.2.0">
<ProductName>Microsoft .NET Framework 2.0</ProductName>
</BootstrapperFile>
</ItemGroup>
<GenerateBootstrapper
ApplicationFile="$(ClickOnceAppName).application"
ApplicationName="$(ClickOnceAppName)"
ApplicationUrl="$(ClickOnceUrl)"
BootstrapperItems="@(BootstrapperFile)"
Culture="en"
FallbackCulture="en-US"
CopyComponents="true"
Validate="false"
Path="$(SdkPath)\Bootstrapper"
OutputPath="$(PublishDir)"/>
<BuildStep
TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Id="$(StepId)"
Status="Succeeded"/>
<OnError ExecuteTargets="MarkBuildStepAsFailed" />
</Target>
<!--
************************************************
Marks a buildstep as failed
************************************************
-->
<Target Name="MarkBuildStepAsFailed">
<BuildStep
TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
BuildUri="$(BuildUri)"
Id="$(StepId)"
Status="Failed"/>
</Target>
<!--
************************************************
Updating web page
************************************************
-->
<Target Name="UpdateWebPage">
<ItemGroup>
<WebPage Include="$(PublishDir)\publish.htm" />
</ItemGroup>
<RegEx
Condition="Exists(@(WebPage))"
Path="@(WebPage)"
RegularExpression="#VERSION#"
NewValue="$(VersionNumber)"
Force="true"/>
</Target>
</Project>