Msbuild: transformar rutas a los espacios de nombres
-
25-09-2019 - |
Pregunta
Tengo una lista de elementos como este:
<ItemGroup>
<ToCompile Include="clojure\core.clj;clojure\set.clj;clojure\zip.clj;clojure\test\junit.clj;"/>
</ItemGroup>
Y quiero transformar eso en una lista de elementos como este:
clojure.core clojure.set clojure.zip clojure.test.junit
¿Hay alguna manera de hacer esto con las transformaciones de msbuild? Lo intenté pero solo puedo llegar al nombre del archivo; La extensión y la ruta de la raíz, y puedo cambiar el separador. Pero no los separadores de ruta.
Si no, se aprecia cualquier otra solución que evite el uso de tareas personalizadas.
Solución
Esto es un poco cursi, pero funciona en MSBuild 4.0+.
<Target Name="Namespaces">
<PropertyGroup>
<Cheesy>@(ToCompile -> '%(relativedir)%(filename)', ' ')</Cheesy>
</PropertyGroup>
<Message Text="$(Cheesy.Replace(`\`, `.`))" />
</Target>
Otros consejos
Podemos hacerlo fácilmente con menos queso:
u003CMessage nText="$([System.String]::Copy('%(ToCompile.Identity)').Replace('.clj','').Replace('','.'))"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow