Включение файлов, созданных внутри PostBuildEvent, в развертывание ClickOnce происходит в состоянии гонки и иногда не работает правильно - PullRequest
0 голосов
/ 11 января 2019

У меня есть проект WPF. Его .csproj файл содержит <PostBuildEvent> - там запускается скрипт, который создает несколько дополнительных файлов. Размер одного из них составляет почти 20 МБ, а сам проект довольно велик - может быть важно воспроизвести проблему.

Я бы хотел развернуть эти файлы вместе с проектом через 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, поскольку его использование будет более сложным)
...