我有一个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>
标签中指定每个文件,但是它不起作用。而且,从理论上讲,当脚本生成不同的文件时,可能会有一种情况,因此这种解决方法将变得毫无用处。
问题是:
<Content>
个文件和文件夹复制到publish
文件夹中?<PostBuildEvent>
是构建过程的一部分?<PostBuildEvent>
脚本内部生成的文件正确地包含到部署中,以消除不常见但非常烦人的部署错误? (并且不要使用mage.exe
,因为使用它会更复杂)