【问题标题】:MSBuild AL (assembly linker) timing issue?MSBuild AL(程序集链接器)计时问题?
【发布时间】:2012-01-06 14:31:45
【问题描述】:

我正在尝试在我的 MSBuild 脚本中使用 AL 任务,每次运行它都会得到不同的结果。

<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 任务是否存在时间问题?有没有暂停直到他们完成?

【问题讨论】:

    标签: msbuild msbuild-task al.exe


    【解决方案1】:

    根本原因是在生成 $(TempDirectory)\sitetext.dll 程序集之前填充了 LibraryFilesToCopy 项目集合。修复很简单:

    <!-- 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)"/>
    

    【讨论】:

    • 完美解决方案。感谢那!我对 MSBuild 比较陌生,不知道 ItemGroups 是如何工作的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2018-02-10
    相关资源
    最近更新 更多