我如何获得Visual Studio使用的clickonce构建脚本来发布我的应用程序

我有一个相当大的多项目解决方案.我目前在Visual Studio中构建它,然后使用right-click =>进行发布.发布选项.这很好.

现在,我的位置至少需要使clickonce发布自动化,而我在Visual Studio中无法做到.我已经成功创建了一个publish.xml文件,可以将其与msbuild和mage一起使用,以创建类似于clickonce的文件.但是,Visual Studio界面中的配置有很多复杂性,我想简单地将它们复制到我的publish.xml文件中.

是否可以使Visual Studio生成一个文件,当Visual Studio通过右键单击=>发布时,该文件提供MSBuild和/或Mage使用的属性.发布过程?

基本上,我想要一个配置文件,可以用来执行msbuild publish.xml(或类似文件)之类的操作,并确切地获得Visual Studio生成的发布结果.

我目前正在使用VS2017.该应用程序是使用C#的Winforms

这是我的publish.xml.不应有任何考验

<Project> 
    <PropertyGroup>
        <OutputPathBuild>C:\Users\d_000\Documents\Visual Studio 2017\Projects\CP\CP.UI.Winforms\bin\x86\Debug</OutputPathBuild>
        <Version>1.0.0.0</Version>
        <OutputPathDeployment>C:\Users\d_000\Documents\CP Deploy\test</OutputPathDeployment>
        <Mage>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\mage.EXE</Mage>
    </PropertyGroup>
  <Target Name="Deployment">
    <Error Condition="'$(Version)'==''" Text="The Version property must be defined in order to build the Deployment task."/>

    <ItemGroup>
      <DeploySource Include="$(OutputPathBuild)\**"/>
    </ItemGroup>
    <Copy SourceFiles="@(DeploySource)" DestinationFolder="$(OutputPathDeployment)\v$(Version)\%(RecursiveDir)"/>
    <Exec Command='"$(Mage)" -New Application -ToFile "$(OutputPathDeployment)\v$(Version)\MyApp.manifest" -Name MyApp -Version $(Version) -Processor X86 -FromDirectory "$(OutputPathDeployment)\v$(Version)" -IconFile Resources\CPIcon.ico'/>
    <Exec Command='"$(Mage)" -New Deployment -ToFile "$(OutputPathDeployment)\MyApp.application" -Name MyApp -Version $(Version) -Processor X86 -AppManifest "$(OutputPathDeployment)\v$(Version)\MyApp.manifest" -IncludeProviderURL true -ProviderURL "http://example.com/download/MyApp/MyApp.application" -Install true'/>
    <!-- Grr... Mage tool has a bug whereby -MinVersion only works in Update mode... -->
    <Exec Command='"$(Mage)" -Update "$(OutputPathDeployment)\MyApp.application" -MinVersion $(Version)'/>
    <Copy SourceFiles="$(OutputPathDeployment)\MyApp.application" DestinationFiles="$(OutputPathDeployment)\MyApp.v$(Version).application"/>
  </Target>
  </Project>

编辑:

我需要自定义发布过程中的内容,因此我想找出Visual Studio在做什么.本质上,我想让命令在Visual Studio中运行,复制并进行调整,以便可以使用不同的delpoy URL自动化几个不同的构建并更新URL

解决方法:

如果要为不同阶段创建ClickOnce,则必须在调用MSBuild之前处理proj文件.

1)读取您的.proj文件

$projFilePath = Get-ChildItem $sourceRootDirectory -Filter $ProjectFileName -Recurse 
$XmlDocument = [xml] (Get-Content -Path $projFilePath.FullName -Encoding UTF8) 

2)您必须在proj文件中更新此属性:

$ClickOnceForStages.Split("Dev", "Test", "UAT", "Prod") | Foreach { 

  $XmlDocument.project.PropertyGroup[0].ApplicationRevision = $BuildRevision
  $XmlDocument.project.PropertyGroup[0].ApplicationVersion = $BuildVersion
  $XmlDocument.project.PropertyGroup[0].ProductName = "MyProductName.$_" 
  $XmlDocument.project.PropertyGroup[0].AssemblyName = "MyAssemblyName.$_"
  $XmlDocument.project.PropertyGroup[0].PublishUrl = "MyClickOnceDropUncPath_$_"
}      

您必须确保:

$BuildRevision and $BuildVersion 

每个版本都有一个增加的版本.

3)保存文档而不处理原始的proj文件.

$currentProjFilePath = $projFilePath.FullName +"_" + $_ + ".proj"
$XmlDocument.Save($clickOnceProjFilePath)

4)调用MSBuild创建ClickOnce安装程序.

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"

您的proj文件与ClickOnce配置和MSBuild参数的组合:

"/target:publish"

创建一个ClickOnce安装程序.

这是我用来创建ClickOnce安装程序的完整MSBuild语句:

"$clickOnceProjFilePath", 
"/target:publish", 
"/p:PublishDir=$outputDirectory", 
"/p:Configuration=Release"
上一篇:《Android框架揭秘》——2.5节应用程序Framework源码级别调试


下一篇:退款参数out_request_no -参数解读系列