我在同一个Visual Studio解决方案中有九个应用程序。所有这些都通过ClickOnce部署(到同一主机内的不同位置),目前我需要右键单击并执行所有发布向导。但我在想是否有一种使用脚本自动执行此操作的方法(理想情况下我只能编写主机密码(用于FTP))。
这可能吗?
答案 0 :(得分:2)
是的,这是可能的。我们使用MSBuild通过ClickOnce发布并通过FTP上传。
Google MSBuild任务和MS社区构建任务
这是我们构建脚本的未经测试的摘录,应该让您入门:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Documentation:
http://msbuildhg.codeplex.com/documentation
http://msbuildtasks.tigris.org/
-->
<PropertyGroup>
<MSBuildMercurialPath>.</MSBuildMercurialPath>
<MSBuildCommunityTasksPath>.</MSBuildCommunityTasksPath>
<BuildInputDir>src</BuildInputDir>
<BuildOutputDir>build</BuildOutputDir>
<TestOutputDir>test</TestOutputDir>
<PublishOutputDir>publish</PublishOutputDir>
<PublishDir>..\..\$(PublishOutputDir)</PublishDir>
<SolutionToCompile>$(BuildInputDir)\EventLogger.sln</SolutionToCompile>
<!-- Settings -->
<Company>Veodin</Company>
<Product>KeyRocket</Product>
<!-- ClickOnce deployment -->
<InstallUrl>http://download.veodin.com/keyrocket/</InstallUrl>
<UpdateUrl>http://download.veodin.com/update/keyrocket/</UpdateUrl>
<!-- Upload_FTP -->
<UploadMethod>FTP</UploadMethod>
<ftpHost>ftp.com</ftpHost> <!-- e.g. 'mroc.de' !!! -->
<ftpUser>user</ftpUser>
<ftpPass>password</ftpPass>
<ServerDir>/download/</ServerDir> <!-- E.g. 'downloads/test/' !!! -->
</PropertyGroup>
<Import Project="Tools\MSBuild.Mercurial.Tasks" />
<Import Project="Tools\MSBuild.Community.Tasks.Targets" />
<Target Name="Clean">
<Message Text="-------------------------------------------------------------------------------------------------------------------"/>
<RemoveDir Directories="$(BuildOutputDir)" />
<RemoveDir Directories="$(TestOutputDir)" />
<RemoveDir Directories="$(PublishOutputDir)" />
</Target>
<Target Name="Publish">
<Message Text="-------------------------------------------------------------------------------------------------------------------"/>
<Message Text="Publishing version $(Major).$(Minor).$(Build).$(Revision), Company=$(Company), Product=$(Product)"/>
<PropertyGroup>
<PublishArgs>Configuration=Automated_Build;PublishDir=$(PublishDir)\;InstallUrl=$(InstallUrl);UpdateUrl=$(UpdateUrl);ApplicationVersion=$(Major).$(Minor).$(Build).$(Revision);ApplicationRevision=$(Revision);IsWebBootstrapper=true;BootstrapperEnabled=true;PublisherName=$(Company);ProductName=$(Product)</PublishArgs>
</PropertyGroup>
<MSBuild
Projects="$(BuildInputDir)\VeodinKeyRocket\VeodinKeyRocket.csproj"
Targets="Clean"
Properties="$(PublishArgs)" />
<MSBuild
Projects="$(BuildInputDir)\VeodinKeyRocket\VeodinKeyRocket.csproj"
Targets="Rebuild"
Properties="$(PublishArgs)" />
<MSBuild
Projects="$(BuildInputDir)\VeodinKeyRocket\VeodinKeyRocket.csproj"
Targets="Publish"
Properties="$(PublishArgs)" />
</Target>
<Target Name="Upload_FTP" Condition=" '$(UploadMethod)' == 'FTP'">
<Message Text="-------------------------------------------------------------------------------------------------------------------"/>
<Message Text="Uploading to $(ftpHost)/$(ServerDir)" />
<FtpUploadDirectoryContent
ServerHost="$(ftpHost)"
Port="21"
Username="$(ftpUser)"
Password="$(ftpPass)"
LocalDirectory="$(PublishOutputDir)"
RemoteDirectory="$(ServerDir)"
Recursive="true" />
</Target>
<Target Name="Build" DependsOnTargets="Clean;Publish;Upload_FTP;">
<Message Text="Clean;Publish;Upload_FTP;"/>
</Target>
</Project>