我有一个与ASP.NET应用程序密切相关的ClickOnce WPF应用程序。 ASP.NET应用程序在某些点启动ClickOnce应用程序,ClickOnce应用程序部署在ASP.NET应用程序的子文件夹中。
我已经完成了所有这些工作,并且我知道在进行自动构建时我可以使用/ target:publish开关来更新ClickOnce文件。但是,这对开发人员的体验没有帮助。
现在,当开发人员对WPF应用程序进行更改并点击Web应用程序上的Run时,您在WPF应用程序中看不到您的更改,因为您必须在本地再次手动发布它。
有没有办法调用发布行为,以便在Visual Studio中构建ClickOnce应用程序时重新发布?
注意:我尝试在WPF应用程序的后期构建步骤中添加“msbuild / target:publish”,但这会导致无限循环,我认为因为发布目标实际上进行了重建,这会调用构建后的步骤。
答案 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
。