Question

I'm attempting to use the AL task in my MSBuild script and each time I run it I get different results.

<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>

I basically have a text file, I want to convert it to a resource (works) and then create a dll from it (works) but it's always the end copy and delete tasks that are very random. Is there a timing issue with AL tasks? Is there anyway to pause until they are finished?

Was it helpful?

Solution

The root cause is that LibraryFilesToCopy item collection is filled BEFORE $(TempDirectory)\sitetext.dll assembly is generated. Fix is simple:

<!-- 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)"/>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top