2010-10-08 62 views

回答

8

望着的MSBuild文件的Visual Studio使用,后生成事件被构建目标运行。如果您从命令行运行msbuild并直接调用发布目标,它肯定会首先调用Build。如果在VS中右键单击该项目并单击发布,则假定VS已经完成构建,则会调用一个名为PublishOnly的裁剪目标。

你后生成事件应该由Visual Studio中运行时,它会自动建立之前出版项目。在项目属性的“生成事件”选项卡中,是否将事件设置为“始终运行”?

如果你想更加明确之前,出版发生了什么,有一个BeforePublish目标是发布总是寻找,无论是通过的MSBuild或Visual Studio运行。手动编辑您的项目文件,在底部您会看到一些注释掉的目标元素。加入这样的一个你自己的:

<Target Name="BeforePublish"> 
    <Exec Condition="'$(PostBuildEvent)' != ''" 
      WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" /> 
</Target> 

这将运行在您的项目中的定义相同后生成事件,但你可以把任何的MSBuild任务的目标元素中。

+4

所以我生成事件是复制正确的app.config(我有一个开发,测试和生产线的版本),并对其进行加密。后构建事件会触发(谢谢),但我发现不会将此app.config复制到发布清单中,它似乎从项目中选择原始的app.config。 – Brad 2010-10-12 16:52:24

+0

ClickOnce将发布任何内容为“内容”的构建操作的项目,因此请确保您的源app.config的构建操作为无。这不会阻止app.config通过构建重新命名为MyApp.exe.config。 ClickOnce将选择exe.config,因为构建将其列为输出。如果您在BeforePublish目标中的Debug/Release文件夹中替换exe.config,ClickOnce应该选取您的加密版本。 – 2010-10-13 17:22:33

+1

@Ray ...但问题是ClickOnce不从调试/发布文件夹中提取exe.config。它正在从“应用程序配置”中选择它,不管它是什么。这是一个ClickOnce发布会话期间从Visual Studio的输出窗口线:从 “的App.config” 复制文件” .. \ .. \ .. \ BIN \ MEO_D_E_Release \ app.publish \应用程序文件\ EMS.OCC600.Infrastructure。 Shell_1_0_4_28 \ EMS.OCC600.Infrastructure.Shell.exe.config”。 – 2012-11-01 17:05:56

相关问题