如何在Release中包含* .min。*,在Debug Build中包含*。*并保留父文件夹?

时间:2014-12-12 02:11:16

标签: msbuild winjs

我想在我的项目中包含WinJS源代码。它附带了*.js*.css文件的缩小版本。为了节省空间,我想仅包含Release configurations的缩小版本。

到目前为止我想出的是:

<Content Include="WinJS\css\*.css;WinJS\js\*.js" Condition="$(Configuration) == 'Debug'">
  <Link>WinJS\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>
<Content Include="WinJS\css\*.min.css;WinJS\js\*.min.js" Condition="$(Configuration) == 'Release'">
  <Link>WinJS\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>

有两个问题:

  1. Debug Configuration还包含.min.*个文件。那将是一个小问题。
  2. (更重要的是)使用RecursiveDir那样的文件的父文件夹丢失了
  3. Release Configuration中,应删除.min部分,以便我可以在代码中使用一个名称引用文件(<script src="/WinJS/js/WinJS.js"/>
  4. 项目中的预期结果应始终为:

    WinJS/css/ui-light.css
    WinJS/css/ui-dark.css
    WinJS/js/WinJS.js
    

    来自.min中的Release Configuration版本或Debug Configuration中的非缩小版本。

    结合IncludeExclude

    可能会做一些聪明的事情

1 个答案:

答案 0 :(得分:0)

%(RecursiveDir)项目元数据仅在您使用wildchar **时可用。 请参阅MSBuild Well-known Item Metadata

的文档

我不使用WinJS但是如果在您需要引用文件js和css文件的地方使用链接元数据,这可能是您的解决方案:

<Content Include="WinJS\**\*.css;WinJS\**\*.js" Exclude="WinJS\**\*.min.css;WinJS\**\*.min.js" Condition="$(Configuration) == 'Debug'" >
  <Link>WinJS\%(RecursiveDir)%(FileName)%(Extension)</Link>
</Content>
<Content Include="WinJS\**\*.min.css;WinJS\**\*.min.js" Condition="$(Configuration) == 'Release'">
  <Link>WinJS\%(RecursiveDir)$([System.String]::Copy("(Filename)").Replace(".min",""))%(Extension)</Link>
</Content>