Visual Studio 的构建后事件是否可以与 ClickOnce 发布一起使用?

8
在Visual Studio 2008中,能否在ClickOnce发布时使用后期构建事件?如果可以,如何操作?
默认情况下,似乎只能使用预构建事件,而ClickOnce发布似乎会将项目构建到不同的位置,在启动后期构建事件之前。
2个回答

7
观察Visual Studio使用的MSBuild文件,后置构建事件由Build目标运行。如果你从命令行运行msbuild并直接调用Publish目标,它肯定会先调用Build。如果你在VS中右键单击项目并点击发布,会运行一个被精简的名为PublishOnly的目标,假设VS已经完成了构建。
你的后置构建事件应该在Visual Studio自动构建项目之前运行。在项目属性的“生成事件”选项卡中,你是否将事件设置为“始终运行”?
如果你想更明确地了解发布前发生了什么,有一个BeforePublish目标,Publish无论是由MSBuild还是Visual Studio运行,都会查找它。手动编辑你的项目文件,在底部你会看到几个被注释掉的Target元素。添加一个类似于以下内容的目标:
<Target Name="BeforePublish">
    <Exec Condition="'$(PostBuildEvent)' != ''" 
          WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" />
</Target>

这将运行您在项目中定义的相同的后构建事件,但您可以在这些Target元素中放置任何MSBuild任务。


4
我的构建事件是复制正确的app.config文件(我有开发、测试和生产版本),并对其进行加密。后置构建事件确实被触发了(谢谢),但是我发现它没有将这个app.config复制到发布清单中,似乎它选择了项目中的原始app.config文件。 - Brad
ClickOnce会发布项目中所有“Content”构建操作的内容,因此请确保您的源app.config的构建操作为“None”。这不会阻止app.config在构建时被重命名为MyApp.exe.config。ClickOnce将获取exe.config,因为构建将其列为输出。如果您在BeforePublish目标中替换Debug/Release文件夹中的exe.config,则ClickOnce应该会获取您的加密版本。 - Rory MacLeod
1
@Ray...但问题是ClickOnce没有从Debug/Release文件夹中获取exe.config。它是从“App Config”中获取的,不知道那是什么。这是在ClickOnce发布会话期间从Visual Studio的输出窗口中的一行:将文件从“App.config”复制到“……\……\……\bin\MEO_D_E_Release\app.publish\Application Files\EMS.OCC600.Infrastructure.Shell_1_0_4_28\EMS.OCC600.Infrastructure.Shell.exe.config”。 - Klaus Nji

0

链接已失效。 - Captain Sensible

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接