1

次のタスクがあります。これは、DestinationFiles と DestionationFolder の組み合わせが原因で機能しませんが、やりたいことの概念をつかみます。

<CreateItem Include="$(Destination)\**\*.Generated.*.*">
  <Output TaskParameter="Include" ItemName="GeneratedFiles" />
</CreateItem>

<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug-All' Or '%(ConfigurationToBuild.FlavorToBuild)'=='Release-WebService' "
      SourceFiles="@(GeneratedFiles)"
      DestinationFiles="@(GeneratedFiles-&gt;'%(RecursiveDir)%(Filename)%(Extension)')"
      DestinationFolder="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)"
/>

そのため、生成される一連のファイル (コードではなくデータ) があり、これらを最終的なバイナリの場所にコピーする必要があります。

このビルドでは、Debug-All バージョン、Release-Client バージョン、Release-WebService の 3 つの構成を一度にビルドします。その理由は、同じビルド番号とまったく同じコード ベースを維持しながら、Client プロジェクトと WebService プロジェクトを「公開」し、セットアップ プロジェクトで取得するためです。

使用しようとすると: DestinationFiles="@(GeneratedFiles->'$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\%(RecursiveDir)%(Filename)%(Extension)')"

MSBuild は %(ConfigurationToBuild.FlavorToBuild) 部分でエラーをスローします。

4

1 に答える 1

0

この問題の回避策を見つけました。つまり、コマンドを手動で複製します。したがって、一般的ではなく、ビルドログ ファイルにさらに多くのノイズが生成されますが、少なくとも機能します!

<!-- Copy the updated files to the Binariesroot to have them picked up by the Setups -->
<CreateItem Include="$(Destination)\**\*.Generated.*.sql">
  <Output TaskParameter="Include" ItemName="GeneratedSqlFiles" />
</CreateItem>
<Message Text="GeneratedSqlFiles=@(GeneratedSqlFiles)->RecursiveDir=%(RecursiveDir) Filename=%(Filename)%(Extension)" />

<CreateProperty Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug'" 
                Value="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" >
  <Output TaskParameter="Value" PropertyName="RealBinariesRoot" />
</CreateProperty>
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='Debug'"
      SourceFiles="@(GeneratedSqlFiles)"
      DestinationFiles="@(GeneratedSqlFiles->'$(RealBinariesRoot)\Deployment\%(RecursiveDir)%(Filename)%(Extension)')"
/>
<CreateProperty Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='WebService'"
            Value="$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)" >
  <Output TaskParameter="Value" PropertyName="RealBinariesRoot" />
</CreateProperty>
<Copy Condition=" '%(ConfigurationToBuild.FlavorToBuild)'=='WebService'"
      SourceFiles="@(GeneratedSqlFiles)"
      DestinationFiles="@(GeneratedSqlFiles->'$(RealBinariesRoot)\Deployment\%(RecursiveDir)%(Filename)%(Extension)')"
/>

その間に、「。」がある場合も見つかりました。CreateItem タスクのインクルード パスでは、RecursiveDir プロパティが入力されなくなりました。

'drive:\somefolder\subfolder\Sources\Generated***.Generated.*.sql' は、%(RecursiveDir) メタデータを提供します。使用する

上記と同じパスに解決される「ドライブ:\somefolder\subfolder\.\Sources\Generated***.Generated.*.sql」は、%(RecursiveDir) メタデータを提供しません。(サブフォルダーとソースの間の微妙な「.」に注意してください)

もちろん (マーフィーの法則) これを使用して、どのブランチをビルドする必要があるかを で指定します。メインブランチを指している;-)

于 2009-04-14T13:25:35.497 に答える