MSBuild:将路径转换为名称空间

MSBuild:将路径转换为名称空间,msbuild,msbuild-4.0,Msbuild,Msbuild 4.0,我有如下项目列表: <ItemGroup> <ToCompile Include="clojure\core.clj;clojure\set.clj;clojure\zip.clj;clojure\test\junit.clj;"/> </ItemGroup> clojure.core clojure.set clojure.zip clojure.test.junit 我想将其转换为如下项目列表: <ItemGroup> &

我有如下项目列表:

<ItemGroup>
    <ToCompile Include="clojure\core.clj;clojure\set.clj;clojure\zip.clj;clojure\test\junit.clj;"/>
</ItemGroup>
clojure.core clojure.set clojure.zip clojure.test.junit

我想将其转换为如下项目列表:

<ItemGroup>
    <ToCompile Include="clojure\core.clj;clojure\set.clj;clojure\zip.clj;clojure\test\junit.clj;"/>
</ItemGroup>
clojure.core clojure.set clojure.zip clojure.test.junit clojure.core clojure.set clojure.zip clojure.test.junit 有没有办法通过MSBuild转换实现这一点?我试过了,但我只能得到文件名;扩展名和根路径,我可以更改分隔符。但不是路径分隔符


如果没有,任何其他避免使用自定义任务的解决方案都是值得赞赏的。

这有点俗气,但它可以在MSBuild 4.0+中工作

<Target Name="Namespaces">
  <PropertyGroup>
    <Cheesy>@(ToCompile -> '%(relativedir)%(filename)', ' ')</Cheesy>
  </PropertyGroup>
  <Message Text="$(Cheesy.Replace(`\`, `.`))" />
</Target>

@(ToCompile->'%(relativedir)%(文件名)',)

我们可以用更少的奶酪轻松完成:


您可以在powershell任务工厂中编写自定义任务,这比在自己的程序集中编写完整的C#任务要简单得多。不过,我建议它们只用于非常小的任务。看:是的,谢谢。这本来是我的备份解决方案,但下面的(虽然很俗气:)麻烦小得多。谢谢,这看起来确实容易。但是为什么要复制呢?我认为您不能使用
%(ToCompile.Identity)
字符串引用来调用
.Replace
,因此您需要使用静态方法
copy
来创建一个可以使用
.Replace
的引用。