我需要能够克服输出程序集的名称。
有一个包含前缀appid的文件。我需要读取文件以获取此前缀,然后将其用于程序集名称。即,程序集名称engine.dll和appid包含slot_113。最终输出应该是engine_slot113.dll。
我正在考虑创建一个单独的.targets文件,我可以将其包含到需要该行为的任何.csproj文件中。
我发现一个任务ReadFileLines读取文件包含appid,但我不知道如何覆盖输出名称。
答案 0 :(得分:2)
您可以使用MSBuild Copy Task轻松实现此目的。
假设您已经在属性$(AssemblyNameSuffix)
中提取了后缀并指定了程序集文件项组@(AssemblyDllFiles)
,所以:
RenameDlls.targets
文件(内容如下所示)testfile.txt
以及目标文件msbuild.exe RenameDlls.targets
testfile.txt
将被复制为testfile_SUFFIX.txt
注意:您也可以将此操作应用于多个文件
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。