ClickOnce 使用命令行发布时缺少 ApplicationFiles 文件夹

ApplicationFiles folder missing when ClickOnce publish with command line

使用 IDE 的 ClickOnce 发布工作正常。

尝试通过 MSBuild 命令行发布时

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

只有 Project.exeSetup.exe 份。

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

如何通过命令行发布 IDE 使用

的相同 ClickOnce 设置

PSthis问题相似但不相同

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

某些功能由 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

执行构建命令后,所有预期的文件都通过命令行发布,与 IDE 使用的 ClickOnce 设置相同。

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