0

我正在使用 Microsoft 的 AjaxMin 来缩小我的网站上的 javascript,该网站由 Azure 托管。我正在使用 BuildTask 在运行时自动缩小 javascript。此构建任务在 .csproj 文件中指定。

该过程在我的本地环境中运行,但是,当我部署到我的 Azure 站点时它不起作用。当我尝试引用 .js 文件的缩小版本时,天蓝色站点抛出 404: file not found 错误。

是否可以在 Azure 站点上使用构建任务?有什么我想念的吗?我已经确保不要在源代码管理中包含 .min.js 文件,因为这个(http://www.asp.net/ajaxlibrary/AjaxMinQuickStart.ashx)教程建议,但我想知道是否有任何特定于 Azure 的东西我需要设置。

谢谢!

4

2 回答 2

1

我已经在我的项目中正常工作了。我会告诉你我是怎么做到的,尽管这可能不是最简单或最直接的方法。

在我们开始之前,能够检查您的缩小文件是否包含在 Azure 部署包中而不实际部署会很有帮助。这很容易做到。该.cspkg文件实际上是一个 zip 格式的文件,因此您可以使用任何 zip 存档器打开它。(我喜欢为此使用 7Zip,因为右键单击 -> 打开存档命令不需要您重命名文件,但您可以使用 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 转换和其他一些事情)。如果是这种情况,请参阅此博客文章以了解解决方法。

以防万一该博客文章消失,我将在此处复制最相关的部分。您可以将其放入您的网络角色的 .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)" />
于 2013-02-20T16:01:46.163 回答
0

构建项目时,构建任务将在 Visual Studio 中运行。您需要确保将缩小文件也部署到 Azure。

我猜这可能是因为该项目是在构建时生成的,它不是项目本身的一部分,并且部署步骤忽略了这一点。

请检查正在使用的部署系统将包括所有脚本文件,而不仅仅是项目本身中的那些。

于 2013-02-19T22:12:54.543 回答