这是我发布个人资料的摘要:
<Exec WorkingDirectory="$(_PackageTempDir)"
Command="uglifyjs ..\..\..\..\js\file1.js ..\..\..\..\js\file2.js --mangle --reserved "$" --compress > js\outfile.min.js" />
某些文件(例如file1.js)位于我的项目之外,因此不会复制到_PackageTempDir。在这里,我必须......达到几个级别才能到达那里。我想知道是否有一种很好的方法可以使用ItemGroup或完整路径来获得相同的结果。
以上代码“有效”。这很复杂,难以维护。寻找更好的解决方案。
编辑:
根据Sayed的建议,我将自己的个人资料改进为:
<ItemGroup>
<UglifyJSFiles Include="$(MSBuildThisFileDirectory)..\..\js\mcm\mcm.js" />
<UglifyJSFiles Include="$(_PackageTempDir)\js\main.js" />
</ItemGroup>
<Exec WorkingDirectory="$(_PackageTempDir)"
Command="uglifyjs @(UglifyJSFiles,' ') > js\app.min.js" />
但我遇到了一个问题,因为路径包含空格。如何引用路径字符串或转义空格?
答案 0 :(得分:0)
以下是一个展示更好方法的示例
<PropertyGroup>
<JsFilesToUglifyRoot Condition=" '$(JsFilesToUglifyRoot)'=='' ">$(MSBuildThisFileDirectory)\..\..\..\..\js\</JsFilesToUglifyRoot>
</PropertyGroup>
<ItemGroup>
<JsFilesToUglify Include="$(JsFilesToUglifyRoot)**\*.js" />
</ItemGroup>
<Target Name="AfterBuild">
<Message Text="Files: [@(JsFilesToUglify,' ')]" Importance="high" />
<!-- If you need to quote the file paths use the transform below -->
<Message Text="Files: [@(JsFilesToUglify->'"%(FullPath)"',' ')]" Importance="high" />
</Target>
在这里,我定义了一个新属性JsFilesToUglify
,其中填充了您在上面指出的路径。请注意MSBuildThisFileDirectory
保留属性的用法。你不应该只依赖..\
,因为它的VS在VS之外的值可能不同。另外,请勿使用MSBuildProjectDirectory
属性,仅使用MSBuildThisFileDirectory
。
然后在目标内部我使用@(JsFilesToUglify,' ')
变换文件列表,' '
使空格成为值之间的分隔符,就像上面的命令一样。