在Visual Studio中完成构建时自动发布ClickOnce

时间:2011-06-17 14:57:58

标签: visual-studio msbuild clickonce

我有一个与ASP.NET应用程序密切相关的ClickOnce WPF应用程序。 ASP.NET应用程序在某些点启动ClickOnce应用程序,ClickOnce应用程序部署在ASP.NET应用程序的子文件夹中。

我已经完成了所有这些工作,并且我知道在进行自动构建时我可以使用/ target:publish开关来更新ClickOnce文件。但是,这对开发人员的体验没有帮助。

现在,当开发人员对WPF应用程序进行更改并点击Web应用程序上的Run时,您在WPF应用程序中看不到您的更改,因为您必须在本地再次手动发布它。

有没有办法调用发布行为,以便在Visual Studio中构建ClickOnce应用程序时重新发布?

注意:我尝试在WPF应用程序的后期构建步骤中添加“msbuild / target:publish”,但这会导致无限循环,我认为因为发布目标实际上进行了重建,这会调用构建后的步骤。

1 个答案:

答案 0 :(得分:5)

在文件Microsoft.Common.targets(v4.0.30319 x64)中,发布目标定义如下:

<PropertyGroup>
    <PublishDependsOn Condition="'$(PublishableProject)'=='true'">
        SetGenerateManifests;
        Build;
        PublishOnly
    </PublishDependsOn>
    <PublishDependsOn Condition="'$(PublishableProject)'!='true'">
        _DeploymentUnpublishable
    </PublishDependsOn>
</PropertyGroup>
<Target
    Name="Publish"
    DependsOnTargets="$(PublishDependsOn)"/>

由于Publish已经依赖于 Build ,只需在 AfterBuild 中调用发布目标(或将其添加到该目标的依赖项列表中)不行。

但是,由于 Publish 只是通过指定其依赖项来定义操作的顺序,因此您可以让Visual Studio在每次构建之后通过将“发布目标”的依赖项添加到 Build 的依赖关系。只需将以下内容添加到WPF应用程序的.csproj(或.vbproj)文件的最后。请注意,必须在之后修改依赖项,包括Microsoft.CSharp.targets(其中包括Microsoft.Common.targets)。

<PropertyGroup>
  <BuildDependsOn>
    SetGenerateManifests;
    $(BuildDependsOn);
    PublishOnly
  </BuildDependsOn>
</PropertyGroup>

如果您只想在某些版本中覆盖此设置,只需在此Condition上添加相应的PropertyGroup