【问题标题】:Automatically publish ClickOnce when build finishes in Visual Studio在 Visual Studio 中构建完成时自动发布 ClickOnce
【发布时间】:2011-06-20 01:41:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 您希望在每次构建后发布应用程序的原因是什么?如果您的开发人员不考虑立即重新发布应用程序,他们是否有可能只是为了测试目的而重新构建应用程序?
  • 我不想在每次构建后发布。理想情况下,我想在 WPF 应用程序更改时发布。当我使用 WPF 应用程序进行更改/测试/再次更改循环时,必须不断发布才能通过 Web 应用程序运行它,这很烦人。 Web 应用程序将 URL 参数传递给程序,因此它需要在该上下文中运行才能真正针对某些场景进行测试。

标签: visual-studio msbuild clickonce


【解决方案1】:

在文件 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 目标(或将其添加到该目标的依赖项列表中)即可不行。

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

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

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

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多