ClickOnce 使用命令行发布时缺少 ApplicationFiles 文件夹
ApplicationFiles folder missing when ClickOnce publish with command line
使用 IDE 的 ClickOnce 发布工作正常。
尝试通过 MSBuild 命令行发布时
%MSBUILD% /target:publish /p:Configuration=Release;PublishDir="REMOTE_FOLDER"
只有 Project.exe
和 Setup.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
的值更改为您的项目路径。
使用 IDE 的 ClickOnce 发布工作正常。
尝试通过 MSBuild 命令行发布时
%MSBUILD% /target:publish /p:Configuration=Release;PublishDir="REMOTE_FOLDER"
只有 Project.exe
和 Setup.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
的值更改为您的项目路径。