【问题标题】:MSBuild ClickOnce app: FTP Upload files after buildMSBuild ClickOnce 应用程序:构建后 FTP 上传文件
【发布时间】:2018-11-18 15:03:02
【问题描述】:

我正在使用 MS build 在 Visual Studio 2017 开发人员命令行中将我的 ClickOnce 应用程序发布到远程 ftp 站点。 如何在构建后启动在 Visual Studio 中启动的 FTP 文件上传?这是我构建项目的命令行:

msbuild  /target:publish -property:Configuration=Release /p:PlatformTarget=x86 "%USERPROFILE%\VSProjects\IIC\IIC.UI.vbproj"

【问题讨论】:

    标签: vb.net visual-studio msbuild


    【解决方案1】:

    命令行单击一次部署存在两个问题:(1) 项目的发布属性页面中的自动增量选项在命令行中不受支持,以及 (2) 的主题问题,开始FTP上传到远程站点。

    解决方案(使用 Visual Studio 2017 Developer Command Prompt v15.7.3)

    1. 从这里下载社区 ms 构建任务:https://github.com/loresoft/msbuildtasks
    2. 卸载项目并使用 notepad++ 或您选择的编辑器打开并导入社区 ms 构建任务。按照他们 github 页面上的说明进行操作。
    3. 添加文件 ProjectName.version.txt,其中只有一行包含您项目的版本信息。例如:

    1.2.78.1341

    数字对应{Major}.{Minor}.{Build}.{ApplicationRevision}

    1. 将以下目标添加到项目底部,该目标使用 Version 和 FileUpdate 社区任务:

         <Target Name="beforePublishCmd">
      
        <Message Text="revision before: 3.0.0.$(ApplicationRevision)"/>
         <Version VersionFile="ProjectName.version.txt" BuildType="Automatic" Major="3" Minor="0" Build="0" RevisionType="Increment">
            <Output TaskParameter="Major" PropertyName="Major" />
            <Output TaskParameter="Minor" PropertyName="Minor" />
            <Output TaskParameter="Build" PropertyName="Build" />
            <Output TaskParameter="Revision" PropertyName="ApplicationRevision" />
            </Version>
            <Message Text="revision after: 3.0.0.$(ApplicationRevision)"/>
            <FileUpdate Files="ProjectName.vbproj"
                  Regex="&lt;ApplicationRevision&gt;(\d+)"
                  ReplacementText="&lt;ApplicationRevision&gt;$(ApplicationRevision)" />
      </Target>
      

    2. 在调用发布目标之前,从命令行调用上述目标,如下所示:

      msbuild /target:beforePublishCmd -property:Configuration=Release /p:PlatformTarget=x86 "%USERPROFILE%\VSProjects\ProjectName.vbproj"

    3. 添加一个“afterPublish”目标,它使用 FtpUploadDirectoryContent 社区任务。发布目标完成后会自动调用此目标。

       <Target Name="afterPublish">
      
      <PropertyGroup>
        <CurrentDate>$([System.DateTime]::Now.ToString(yyyy MMM dd HH:mm:ss))</CurrentDate>
      </PropertyGroup>
      
       <FtpUploadDirectoryContent 
               ServerHost="projectname.org"
               Username="*****"
               Password="*****"
               LocalDirectory=".\bin\Release\app.publish"
               RemoteDirectory="/"
               Recursive="true"
           />
      <Exec Command="C:\Progra~1\TortoiseSVN\bin\svn commit ..\ --non-interactive --message &quot;Release 3.0.0.$(Revision) on $(CurrentDate): $(commitMessage)&quot;"/>          
       </Target>
      

      1. 最后,从命令行调用发布目标:

        msbuild /target:publish -property:Configuration=Release /p:PlatformTarget=x86 "%USERPROFILE%\VSProjects\ProjectName.vbproj"

    【讨论】:

    • 太棒了!感谢您在这里分享您的解决方案。这可能对阅读此主题的其他社区成员有所帮助。
    【解决方案2】:

    MSBuild ClickOnce 应用:构建后上传文件

    您可以在项目文件中添加复制任务以在构建后上传文件:

    要完成此操作,请卸载您的项目。然后在&lt;/project&gt; 的最后,就在结束标记之前,放置以下脚本:

    <ItemGroup>
        <UploadFiles Include="ThePathOfYourUploadFiles\*.*"/>
    </ItemGroup>
    
    <Target Name="AfterBuild">
        <Copy
            SourceFiles="@(UploadFiles)"
            DestinationFolder="PathWhereYouWantTouploadYourUploadFiles"
        />
    </Target>
    

    有了这个目标,Visual Studio/MSBuild 将在构建后上传文件。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回答,但这不会启动 ftp 上传。这只是将文件复制到目的地。我一直在寻找的是开始将 ftp 上传到远程站点。我已经更新了问题以反映这一点。此外,在 AfterBuild 上部署并不是最佳实践。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多