我已經在我的項目中正常工作。我會告訴你我是怎麼做到的,儘管這可能不是最簡單或最直接的方法。
在我們開始之前,能夠檢查您的縮小文件是否包含在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以解決問題。
萬一那個博客中消失了,我會在這裏複製最相關的位。你會把這在.ccproj文件爲您的Web角色(在適當的位改變,以匹配您的項目結構):
<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)" />
感謝您的答覆。我不確定我想要在項目中包含.min.js文件。據微軟稱:「如果你在項目中包含縮小的文件,並使用源代碼控制,那麼你會遇到問題,當文件簽出源代碼控制的,他們用自己的只讀屬性設置如果選中了你嘗試做一個構建,微軟的Ajax Minifier會產生一個錯誤,當它試圖寫入只讀文件。」似乎Azure應該在每次構建之後創建文件,而不是從本地環境中檢入文件 – user1521567 2013-02-20 15:08:51