2011-09-20 69 views
2

我需要能夠覆蓋輸出程序集的名稱。MSBuild覆蓋輸出文件名

有一個文件包含前綴appid。我需要讀取該文件以獲取此前綴,然後將其用於裝配名稱。即,程序集名稱engine.dll和appid包含slot_113。最終輸出應該是engine_slot113.dll。

我正在考慮創建一個單獨的.targets文件,我可以將其包含到任何需要該行爲的.csproj文件中。

我發現任務ReadFileLines讀取文件包含appid,但我不知道如何覆蓋輸出名稱。

回答

1

我不認爲有一種方法來重寫它,但在後期構建操作重命名它應該是非常可能的。使用PostBuildEvent。

+0

但我還是希望能找到一種方式來覆蓋。我花了幾個小時沒有成功。 –

+0

@alexanderb:您是否嘗試過使用MSBuild目標的解決方案?至少它適合我 – sll

2

您可以使用MSBuild Copy Task輕鬆實現此目的。 讓我們假設你已經提取後綴屬性$(AssemblyNameSuffix)並指定裝配文件項目組@(AssemblyDllFiles),所以:

  1. 創建RenameDlls.targets文件(如下圖所示的內容)
  2. 與目標文件
  3. 執行一起創建testfile.txtmsbuild.exe RenameDlls.targets
  4. 文件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> 
+0

,看起來很有趣,goint試試 –