我正在使用Microsoft的AjaxMin来缩小我的网站上的javascript,该网站由Azure托管。我正在使用BuildTask在运行时自动缩小javascript。此构建任务在.csproj文件中指定。
此过程正在我的本地环境中运行,但是,当我部署到我的Azure站点时,它不起作用。当我尝试引用.js文件的缩小版本时,azure站点抛出404:文件未找到错误。
是否可以在Azure网站上使用构建任务?有什么我想念的吗?我已确保不在源代码管理中包含.min.js文件,因为这(http://www.asp.net/ajaxlibrary/AjaxMinQuickStart.ashx)教程建议,但我想知道是否有任何特定于Azure的内容需要我设置。
谢谢!
答案 0 :(得分:1)
我的项目工作正常。我会告诉你我是怎么做到的,虽然这可能不是最简单或最直接的方式。
在开始之前,能够在没有实际部署的情况下检查Azure部署包中是否包含缩小的文件是有帮助的。这很容易做到。 .cspkg
文件实际上是一个zip格式的文件,因此您可以使用任何zip存档文件打开它。 (我喜欢使用7Zip,因为右键单击 - > Open Archive命令不需要您重命名文件,但您可以使用Windows资源管理器,WinRAR等)在.cspkg
你内部我会看到另一个扩展名为.cssx
的大文件。这也是一个zip文件。在.cssx
的内部,您会找到一个sitesroot
文件夹,其中包含您正在部署的每个网站的子目录,其中包含您所有的实际网站文件。因此,您可以在那里查看并查看正在部署到Azure的文件。
首先,尝试编辑Web项目的项目文件(包含所有Javascript / CSS文件的项目文件)。您可以使用记事本,或在Visual Studio中右键单击项目,选择“卸载项目”,然后再次右键单击并选择“编辑”。在项目文件中,插入如下部分:
<ItemGroup>
<!-- Copy over all the minified CSS & JS to the output directory-->
<Content Include="**\*.min.css" />
<Content Include="**\*.min.js" />
</ItemGroup>
然后重新加载项目,重新打包它,看看你的文件是否包含在.cspkg
文件中。如果他们是,那么你就完成了。
如果没有,还有其他一些事情需要检查。您的缩小可能不会在正确的构建阶段运行。我的缩小目标如下:
<Target Name="PrepWebApp" Condition="$(Configuration)=='Release'" AfterTargets="AfterBuild">
如果仍然无效并且您的Web角色中包含多个站点和/或虚拟应用程序,则可能没有为所有站点运行打包步骤。因此,当您将项目打包以部署到Azure时,它可能仍然没有运行缩小步骤(以及web.config转换以及其他一些操作)。如果是这种情况,请参阅this blog post以获取解决方法。
如果博客文章消失,我会在这里复制最相关的内容。您可以将其放在web角色的.ccproj文件中(更改了适当的位以匹配您的项目结构):
<PropertyGroup>
<!-- Inject the publication of "secondary" sites into the Windows Azure build/project packaging process. -->
<CoreBuildDependsOn>
CleanSecondarySites;
PublishSecondarySites;
$(CoreBuildDependsOn)
</CoreBuildDependsOn>
<!-- This is the directory within the web application project directory to which the project will be "published" for later packaging by the Azure project. -->
<SecondarySitePublishDir>azure.publish\</SecondarySitePublishDir>
</PropertyGroup>
<!-- These SecondarySite items represent the collection of sites (other than the web application associated with the role) that need special packaging. -->
<ItemGroup>
<SecondarySite Include="..\WebApplication1\WebApplication1.csproj" />
<SecondarySite Include="..\WebApplication2\WebApplication2.csproj" />
</ItemGroup>
<Target Name="CleanSecondarySites">
<RemoveDir Directories="%(SecondarySite.RootDir)%(Directory)$(SecondarySitePublishDir)" />
</Target>
<Target Name="PublishSecondarySites" Condition="'$(PackageForComputeEmulator)' == 'true'
Or '$(IsExecutingPublishTarget)' == 'true' ">
<!--
Execute the Build (and more importantly the _WPPCopyWebApplication) target to "publish" each secondary web application project.
Note the setting of the WebProjectOutputDir property; this is where the project will be published to be later picked up by CSPack.
-->
<MSBuild Projects="%(SecondarySite.Identity)" Targets="Build;_WPPCopyWebApplication" Properties="Configuration=$(Configuration);Platform=$(Platform);WebProjectOutputDir=$(SecondarySitePublishDir)" />
答案 1 :(得分:0)
构建项目时,构建任务将在Visual Studio中运行。您需要确保将缩小的文件也部署到Azure。
我猜这可能是因为项目是在构建时生成的,它不是项目本身的一部分,并且部署步骤会忽略它。
请检查所使用的部署系统是否包含所有脚本文件,而不仅仅是项目本身的脚本文件。