ClickOnce使用命令行发布时,ApplicationFiles文件夹丢失

时间:2017-08-08 15:17:15

标签: visual-studio command-line msbuild clickonce

使用IDE进行ClickOnce发布工作正常。

尝试通过MSBuild命令行发布时

%MSBUILD% /target:publish /p:Configuration=Release;PublishDir="REMOTE_FOLDER"

仅限Project.exeSetup.exe份。

尝试%MSBUILD% /target:publish命令时,所有必需的文件都会复制到build\app.publish文件夹

如何通过命令行发布IDE使用的相同ClickOnce设置

PS this提出类似但不一样的问题

1 个答案:

答案 0 :(得分:3)

  

如何通过命令行发布IDE使用的相同ClickOnce设置

某些功能由Visual Studio完成,而不是由MSBuild命令行完成。因此,从命令行执行时,单击一次部署的行为会有所不同。

如果要通过命令行发布IDE使用的相同ClickOnce设置,可以使用自定义目标来实现它。编辑您的project(csproj)文件(右键单击项目节点 - >卸载项目 - >编辑xxx.csproj)并在其中添加以下代码:

  <PropertyGroup>
    <ProjLocation>D:\Test\Projects\ClickOncePublish\ClickOncePublish</ProjLocation>
    <ProjLocationReleaseDir>$(ProjLocation)\bin\Debug</ProjLocationReleaseDir>
    <ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation>
    <DeploymentFolder>D:\Test\Publish\</DeploymentFolder>
  </PropertyGroup>


  <Target Name="Test" DependsOnTargets="Clean">

    <MSBuild Projects="$(ProjLocation)\$(ProjectName).csproj"
        Properties="$(DefaultBuildProperties)"
        Targets="Publish"/>

    <ItemGroup>
      <SetupFiles Include="$(ProjPublishLocation)\*.*"/>
      <UpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*"/>
    </ItemGroup>


    <Copy SourceFiles="@(SetupFiles)" DestinationFolder="$(DeploymentFolder)\" />
    <Copy SourceFiles="@(UpdateFiles)" DestinationFolder="$(DeploymentFolder)\Application Files\%(RecursiveDir)"/>
  </Target>

  <Target Name="Clean">
    <Message Text="Clean project" />
    <MSBuild Projects="$(ProjLocation)\$(ProjectName).csproj"
    Properties="$(DefaultBuildProperties)"
    Targets="Clean"/>
  </Target>

然后,您可以使用MSBuild命令行构建项目:

msbuild /target:test

执行build命令后,所有预期的文件都通过命令行发布,IDE使用相同的ClickOnce设置。 enter image description here

注意:您应该将ProjLocation的值更改为项目的路径。