生成&从Visual Studio内的脚本发布(ClickOnce)

时间:2011-10-10 03:11:26

标签: c# automation clickonce

我在同一个Visual Studio解决方案中有九个应用程序。所有这些都通过ClickOnce部署(到同一主机内的不同位置),目前我需要右键单击并执行所有发布向导。但我在想是否有一种使用脚本自动执行此操作的方法(理想情况下我只能编写主机密码(用于FTP))。

这可能吗?

1 个答案:

答案 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>