Gyu*_*Fox 5 msbuild csproj buildaction visual-studio
我已经将以下代码添加到我的.csproj中,以便缩小构建项目时已更改的JS文件:
<Target Name="BeforeBuild">
<MSBuild Targets="CheckAndMinifyJS" Projects="$(MSBuildProjectFile)" />
</Target>
<ItemGroup>
<JS Include="$(ProjectDir)\**\*.js" />
</ItemGroup>
<Target Name="CheckAndMinifyJS" Inputs="@(JS)" Outputs="@(JS->'$(ProjectDir)%(RecursiveDir)%(Filename).min.js')">
<AjaxMin JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" />
</Target>
<UsingTask TaskName="AjaxMin" AssemblyFile="..\..\ThirdParty\AjaxMinTask.dll" />
Run Code Online (Sandbox Code Playgroud)
这很有效,但它有副作用:当您在Visual Studio(2015)中查看项目时,所有JS文件都显示重复(相同的路径,但不同的构建操作):
我想避免在项目中出现带有"JS"构建操作的项目.我怎样才能做到这一点?
请注意,几个开发人员正在使用该项目,因此任何建议的解决方案都应包含在.csproj或解决方案中(例如:要求所有开发人员修改其注册表以更改JS文件的默认构建操作是不可接受的).
要ItemGroup在 Visual Studio 中隐藏您的文件,请将其移至中间Target. 除了该更改之外,以下代码还会过滤现有Content项目,而不是再次递归文件系统。这可确保您不会拾取无关.js文件(例如 中的中间输出文件obj\,或.min.js由脚本生成但未显式添加到项目中的文件)。
<Target Name="BeforeBuild">
<MSBuild Targets="CheckAndMinifyJS" Projects="$(MSBuildProjectFile)" />
</Target>
<Target Name="GetJSItems" BeforeTargets="CheckAndMinifyJS">
<ItemGroup>
<JS Include="@(Content)" Condition=" '%(Extension)' == '.js' " />
</ItemGroup>
</Target>
<Target Name="CheckAndMinifyJS" Inputs="@(JS)" Outputs="@(JS->'$(ProjectDir)%(RecursiveDir)%(Filename).min.js')">
<AjaxMin JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js" />
</Target>
<UsingTask TaskName="AjaxMin" AssemblyFile="..\..\ThirdParty\AjaxMinTask.dll" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |