У меня есть проект 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
, поскольку его использование будет более сложным)