MSBuild AL (компоновщик сборок) проблема синхронизации?
Я пытаюсь использовать задачу AL в своем скрипте MSBuild, и каждый раз, когда я запускаю ее, я получаю разные результаты.
<Target Name="Build">
<PropertyGroup>
<RootFolder>$([System.IO.Path]::GetDirectoryName($(MSBuildProjectDirectory)))</RootFolder>
<TempDirectory>$(MSBuildProjectDirectory)\temp</TempDirectory>
<WebsiteDirectory>$(RootFolder)\httpdocs\bin</WebsiteDirectory>
</PropertyGroup>
<ItemGroup>
<ResourceFilesToDelete Include="$(TempDirectory)\**\*.resources"/>
<LibraryFilesToCopy Include="$(TempDirectory)\**\*.dll"/>
</ItemGroup>
<!-- English translations -->
<MakeDir Directories="$(TempDirectory)" Condition="!Exists('$(TempDirectory)')"/>
<GenerateResource Sources="$(MSBuildProjectDirectory)\sitetext.txt" OutputResources="$(TempDirectory)\sitetext.resources"/>
<AL EmbedResources="$(TempDirectory)\sitetext.resources" OutputAssembly="$(TempDirectory)\sitetext.dll"/>
<Copy SourceFiles="@(LibraryFilesToCopy)" DestinationFolder="$(WebsiteDirectory)\%(RecursiveDir)"/>
<Delete Files="@(ResourceFilesToDelete)"/>
</Target>
У меня в основном есть текстовый файл, я хочу преобразовать его в ресурс (работает), а затем создать из него dll (работает), но это всегда конечные задачи копирования и удаления, которые очень случайны. Есть ли проблема синхронизации с задачами AL? Есть ли способ сделать паузу, пока они не закончили?
1 ответ
Решение
Основная причина заключается в том, что коллекция элементов LibraryFilesToCopy заполнена ПЕРЕД созданием сборки $(TempDirectory)\sitetext.dll. Исправить это просто:
<!-- English translations -->
<MakeDir Directories="$(TempDirectory)" Condition="!Exists('$(TempDirectory)')"/>
<GenerateResource Sources="$(MSBuildProjectDirectory)\sitetext.txt" OutputResources="$(TempDirectory)\sitetext.resources"/>
<AL EmbedResources="$(TempDirectory)\sitetext.resources" OutputAssembly="$(TempDirectory)\sitetext.dll"/>
<ItemGroup>
<ResourceFilesToDelete Include="$(TempDirectory)\**\*.resources"/>
<LibraryFilesToCopy Include="$(TempDirectory)\**\*.dll"/>
</ItemGroup>
<Copy SourceFiles="@(LibraryFilesToCopy)" DestinationFolder="$(WebsiteDirectory)\%(RecursiveDir)"/>
<Delete Files="@(ResourceFilesToDelete)"/>