如何在构建解决方案时发布WPF clickonce应用程序?

时间:2017-11-08 06:54:03

标签: .net wpf visual-studio-2015 msbuild clickonce

我有一个包含许多项目的解决方案,其中一些项目的输出类型为exe。

我正在使用以下参数作为我的MsBuild调用的一部分

/target:publish /p:PublishDir="$(build.artifactstagingdirectory)\

但是,这将发布Outputtype为exe的所有项目。但是,我只想发布一个特定的项目。

我所阅读的大部分内容都指出了引用名为PublishProfile的内容。但是,我没有看到为此项目类型创建PublishProfile的方法。当我单击发布时,我得到一个基本的发布向导,发布设置存储在.csproj文件而不是.pubxml文件中。那么我该如何申请发布特定项目呢?

1 个答案:

答案 0 :(得分:0)

  

但是,我没有看到为此项目类型创建PublishProfile的方法。当我单击发布时,我得到一个基本的发布向导,发布设置存储在.csproj文件中,而不是.pubxml文件中。那么我该如何申请发布特定项目呢?

PublishProfile用于Web项目而不是单击一次。正如您所说,“基本发布向导和发布设置存储在.csproj文件中而不是.pubxml文件”,因此PublishProfile不应该是正确的选项。

如果您想使用msbuild从解决方案发布特定项目,那么简单的方法是构建整个解决方案,但只发布一个项目文件,如:

msbuild.exe "ProjectName.csproj" /target:publish /p:PublishDir="$(build.artifactstagingdirectory)\

如果使用一个命令行来构建和发布是您的持久性,则可以自定义目标以在要发布的项目文件中发布项目。 For example

<PropertyGroup>
    <!-- the folder of the project to build -->
    <ProjLocation>..\YourProjectFolder</ProjLocation>
    <ProjLocationReleaseDir>$(ProjLocation)\bin\Release</ProjLocationReleaseDir>
    <ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation>
    <!-- This is the web-folder, which provides the artefacts for click-once. After this
     build the project is actually deployed on the server -->
    <DeploymentFolder>D:\server\releases\</DeploymentFolder>
</PropertyGroup>


<Target Name="Publish" DependsOnTargets="Clean">
    <Message Text="Publish-Build started for build no $(ApplicationRevision)" />
    <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Publish"/>   


    <ItemGroup>
        <SchoolPlannerSetupFiles Include="$(ProjPublishLocation)\*.*"/>
        <SchoolPlannerUpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*"/>
    </ItemGroup>
    <Copy
        SourceFiles="@(SchoolPlannerSetupFiles)"
        DestinationFolder="$(DeploymentFolder)\"
    />
    <Copy
        SourceFiles="@(SchoolPlannerUpdateFiles)"
        DestinationFolder="$(DeploymentFolder)\Application Files\%(RecursiveDir)"
    />      
    <CallTarget Targets="RestoreLog"/>
</Target>
<Target Name="Clean">   
    <Message Text="Clean project:" />
    <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Clean"/>
</Target>       

使用此自定义目标,您无需发布项目,只需构建解决方案。

希望这有帮助。