将PostBuildEvent内部生成的文件包含在ClickOnce部署中是在竞争条件下发生的,有时无法正常工作

时间:2019-01-11 09:09:35

标签: msbuild clickonce

我有一个WPF项目。其.csproj文件包含一个<PostBuildEvent>-运行一个脚本,该脚本会生成一些额外的文件。 其中一个的大小接近20 MB,并且该项目本身非常大-重现此问题可能很重要。

我想通过ClickOnce将这些文件与项目一起部署。因此,稍后在.csproj中,我写道:

<Content Include="$(PathToDirectoryWithProducedFiles)\**\*">
    <Link>$(PathRelativeToOutput)\%(RecursiveDir)%(Filename)%(Extension)</Link>
    <Visible>false</Visible>
</Content>

这通常有效,但并非总是如此。 有时只是不将文件放入publish文件夹中,并且有时 ClickOnce安装程序会产生错误"File, [filewhichweights20MB], has a different computed hash than specified in manifest"

我清楚地感觉到ClickOnce部署过程与<PostBuildEvent>中的脚本之间存在竞争状态。有时脚本会及时生成所有文件,有时ClickOnce会在完全生成目录之前尝试复制目录。

我尝试分别在不同的<Content>标签中指定每个文件,但是它不起作用。而且,从理论上讲,当脚本生成不同的文件时,可能会有一种情况,因此这种解决方法将变得毫无用处。

问题是:

  • 何时(在构建过程的哪个阶段之后)ClickOnce完全将<Content>个文件和文件夹复制到publish文件夹中?
  • 为什么在那里存在竞争条件,如理论上<PostBuildEvent>是构建过程的一部分?
  • [主要] 如何将<PostBuildEvent>脚本内部生成的文件正确地包含到部署中,以消除不常见但非常烦人的部署错误? (并且不要使用mage.exe,因为使用它会更复杂)

0 个答案:

没有答案