ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 10:06:06  阅读:284  来源: 互联网

标签:msbuild mage c visual-studio


我有一个相当大的多项目解决方案.我目前在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"

标签:msbuild,mage,c,visual-studio
来源: https://codeday.me/bug/20191111/2019176.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有