我需要能够覆盖输出程序集的名称。MSBuild覆盖输出文件名
有一个文件包含前缀appid。我需要读取该文件以获取此前缀,然后将其用于装配名称。即,程序集名称engine.dll和appid包含slot_113。最终输出应该是engine_slot113.dll。
我正在考虑创建一个单独的.targets文件,我可以将其包含到任何需要该行为的.csproj文件中。
我发现任务ReadFileLines读取文件包含appid,但我不知道如何覆盖输出名称。
我需要能够覆盖输出程序集的名称。MSBuild覆盖输出文件名
有一个文件包含前缀appid。我需要读取该文件以获取此前缀,然后将其用于装配名称。即,程序集名称engine.dll和appid包含slot_113。最终输出应该是engine_slot113.dll。
我正在考虑创建一个单独的.targets文件,我可以将其包含到任何需要该行为的.csproj文件中。
我发现任务ReadFileLines读取文件包含appid,但我不知道如何覆盖输出名称。
我不认为有一种方法来重写它,但在后期构建操作重命名它应该是非常可能的。使用PostBuildEvent。
您可以使用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>
,看起来很有趣,goint试试 –
但我还是希望能找到一种方式来覆盖。我花了几个小时没有成功。 –
@alexanderb:您是否尝试过使用MSBuild目标的解决方案?至少它适合我 – sll