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