ApplicationFiles folder missing when ClickOnce pub

2019-03-04 03:21发布

ClickOnce publish with IDE works normal.

When trying to publish via MSBuild command line

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

only Project.exe and Setup.exe copies.

When try to %MSBUILD% /target:publish command then all necessary files copies to the build\app.publish folder

How do I publish via command line same ClickOnce settings which IDE uses

PS this question similar but not the same

1条回答
叼着烟拽天下
2楼-- · 2019-03-04 04:03

How do I publish via command line same ClickOnce settings which IDE uses

Some features are done by Visual-Studio and not by the MSBuild command line. So the click-once-deployment behaves differently when it's executed from the command-line.

If you want to publish via command line same ClickOnce settings which IDE uses, you can use a custom target to achieve it. Edit your project(csproj) file (right click project node -> unload project -> edit xxx.csproj) and add the following code in it:

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

Then you can build the project with the MSBuild command line:

msbuild /target:test

After execute the build command, all the expected files are publish via command line same ClickOnce settings which IDE uses. enter image description here

Note: You should change the value of ProjLocation to the path of your project.

查看更多
登录 后发表回答