2017-09-18 4 views
0

J'ai essayé le script msbuild suivant (avec la plupart du code non pertinent enlevé):Avec msbuild, comment spécifiez-vous l'argument 'identificateur' optionnel dans le paramètre Csc Task Resources?

<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> 

qui résulte de la production comme celui-ci (i rognée une sortie sans rapport):

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

Je suis en train de prendre avantage de l'argument optionnel "identificateur" pour le paramètre de ressource de la tâche Csc. Je pense que cela échoue parce que la sortie obtient des guillemets autour de chaque élément, de sorte que la tâche Csc pense que le tout est le nom du fichier. Comment puis-je spécifier ces valeurs de ressource & paires d'arguments sans les guillemets?

Ceci est mon premier script msbuild, donc je pourrais facilement être loin de la cible.

+0

J'ai résolu ce problème. pour ceux qui étaient intéressés, je devais changer les balises Id ItemGroup en "LogicalName" – marcaroni

Répondre

0

pour obtenir le résultat souhaité:

<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> 

... parce que "LogicalName" est l'entrée de métadonnées correspondant à l'argument "identificateur".