5

ディレクトリ内の次の規則に基づいて、一連のアセンブリを検索しようとしています。

{SubDirName}\{SubDirName}.dll

[.RecursiveDir 部分で別の ItemGroup をバッチ処理して] MSBuild ItemGroup を作成することから始めました。

<AllAssemblies Include="$(SourceDirectory)\**\Test.*.dll" />
<Dirs Include="@(AllAssemblies->'%(RecursiveDir)')"/>

各項目には末尾にスラッシュがあります。つまり、次のようになります。

<Message Text="@(Dirs)"/>

言います:

SubDir1\;SubDir2\;SubDir3\

ここで、このリストから一連のファイル名を生成したいと考えています。

問題はそれです:

<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" />

生成:

SubDir1\\SubDir1\.dll;SubDir2\\SubDir2\.dll;SubDir3\\SubDir3\.dll

のピリオドの前にスラッシュを付けたくありません.dll

これを達成する最もクリーンな方法は何ですか?

HasTrailingSlash 式演算子があることは知っていますが、OOTB Tasks? に RemoveTrailingSlash タスクの兆候はありません。必要な MSBuild のバージョンについて、私はうるさいわけではありません。

4

2 に答える 2

1

やってみました

<AssembliesByConvention Include="@(Dirs -> '%(Identity)%(Identity).dll')" Condition="HasTrailingSlash(%(Identity))" />
<AssembliesByConvention Include="@(Dirs -> '%(Identity)\%(Identity).dll')" Condition="!HasTrailingSlash(%(Identity))" />
于 2010-08-04T07:25:05.577 に答える
0

.NET 4.0 で MSBuild の .NET メソッド サポートを使用"\."して、最終結果で を "." に置き換えることができます。

(これは少なくとも私の元の問題を解決するでしょう)

于 2013-04-20T12:43:12.813 に答える