MSBuild覆盖输出文件名

时间:2011-09-20 18:23:21

标签: asp.net visual-studio-2010 msbuild

我需要能够克服输出程序集的名称。

有一个包含前缀appid的文件。我需要读取文件以获取此前缀,然后将其用于程序集名称。即,程序集名称engine.dll和appid包含slot_113。最终输出应该是engine_slot113.dll。

我正在考虑创建一个单独的.targets文件,我可以将其包含到需要该行为的任何.csproj文件中。

我发现一个任务ReadFileLines读取文件包含appid,但我不知道如何覆盖输出名称。

2 个答案:

答案 0 :(得分:2)

您可以使用MSBuild Copy Task轻松实现此目的。 假设您已经在属性$(AssemblyNameSuffix)中提取了后缀并指定了程序集文件项组@(AssemblyDllFiles),所以:

  1. 创建RenameDlls.targets文件(内容如下所示)
  2. 创建testfile.txt以及目标文件
  3. 执行msbuild.exe RenameDlls.targets
  4. 文件testfile.txt将被复制为testfile_SUFFIX.txt
  5. 注意:您也可以将此操作应用于多个文件


    MSBuild目标:

    <?xml version="1.0" encoding="utf-8"?>
    
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Default">
    
        <Target Name="Default" DependsOnTargets="CreateItems;CopyItems"/>
    
        <PropertyGroup>         
                    <AssemblyNameSuffix>SUFFIX</AssemblyNameSuffix>
        </PropertyGroup>
    
        <Target Name="CreateItems">
            <ItemGroup>
                <AssemblyDllFiles Include="testfile.txt"/>
            </ItemGroup>
        </Target>
    
        <Target Name="CopyItems" 
                Inputs="@(AssemblyDllFiles)" 
                Outputs="@(AssemblyDllFiles->'.\%(RecursiveDir)%(Filename)_$(AssemblyNameSuffix)%(Extension)')">
               <Message Text="@(AssemblyDllFiles->'%(FullPath)', '%0a%0d')" 
                        Importance="low"/>
    
            <Copy SourceFiles="@(AssemblyDllFiles)" 
                  DestinationFiles="@(AssemblyDllFiles->'.\%(RecursiveDir)%(Filename)_$(AssemblyNameSuffix)%(Extension)')" 
                  SkipUnchangedFiles="true"/>
        </Target>
    </Project>
    

答案 1 :(得分:1)

我认为没有办法覆盖它,但在后期构建操作中重命名它应该是非常可能的。使用PostBuildEvent。