2017-09-18 53 views
0

我嘗試以下的MSBuild腳本(使用最不相干的代碼刪除):在msbuild中,如何在Csc任務資源參數中指定可選的「標識符」參數?

<ItemGroup> 
    <EmbeddedResource Include="$(ResourceLocation)logom.ico"> 
     <Id>resources.icon.m</Id> 
    </EmbeddedResource> 
    <EmbeddedResource Include="$(ResourceLocation)logo.png"> 
     <Id>resources.image.banner</Id> 
    </EmbeddedResource> 
</ItemGroup> 

<Target Name="build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"> 
    <ItemGroup> 
     <EmbeddedResource> 
      <TaggedResource>$([System.String]::Copy('$(ResourceLocation)%(Filename)%(Extension),%(Id)'))</TaggedResource> 
     </EmbeddedResource> 
    </ItemGroup> 

    <Csc 
     Sources="@(Compile)" 
     Resources="@(EmbeddedResource->'%(TaggedResource)')" 
    /> 
</Target> 

導致這樣的輸出(I修剪一些無關輸出):

BuildTools\MSBuild\15.0\Bin\Roslyn\csc.exe /resource:"res\logom.ico,resources.icon.m" /resource:"res\logo.png,resources.image.banner" 

我試圖採取Csc任務的資源參數的可選「標識符」參數的優點。 我認爲它失敗了,因爲輸出得到每個項目的引號,所以Csc任務認爲整個事情就是文件名。如何指定不帶引號的這些資源值&參數對?

這是我的第一個msbuild腳本,所以我可以很容易地離開目標。

+0

我解決了這個問題。對於那些感興趣的,我不得不將ItemGroup Id標籤更改爲「LogicalName」 – marcaroni

回答

0

,以獲得期望的結果:

<ItemGroup> 
    <EmbeddedResource Include="$(ResourceLocation)logom.ico"> 
     <LogicalName>resources.icon.m</LogicalName> 
    </EmbeddedResource> 
    <EmbeddedResource Include="$(ResourceLocation)logo.png"> 
     <LogicalName>resources.image.banner</LogicalName> 
    </EmbeddedResource> 
</ItemGroup> 

<Target Name="build" Inputs="@(Compile)" Outputs="$(OutputPath)$(AssemblyName).exe"> 
    <Csc 
     Sources="@(Compile)" 
     Resources="@(EmbeddedResource)" 
    /> 
</Target> 

...因爲「LogicalName」是對應於「標識符」參數中的元數據條目。

相關問題