2014-01-10 31 views
6

我有一個ASP.NET 3.5 Web應用程序項目。我想將其大部分部署到我的Web服務器上,但我想將CSS,圖像和JavaScript部署到第二個「圖像服務器」。如何在Web和圖像服務器之間拆分Web應用程序的部署

如何使用Web Deploy甚至Visual Studio 2010及更高版本的「發佈」功能執行此操作?


有人問我試過了什麼。我還沒有試過什麼東西,因爲我不知道要去試試。

我在過去的web部署中做了一些認真的工作。我甚至使用Web Deploy來部署非Web應用程序,方法是手動將相應的目標添加到項目文件中。我有MSBUILD書(「Inside the Microsoft® Build Engine: Using MSBuild and Team Foundation Build」,由Sayed Ibrahim Hashimi和William Bartholomew撰寫)和Supplement,並且知道如何添加額外文件到MSDEPLOY包中,這些文件不在項目中,並添加文件夾,以及設置訪問保護等。

我在做什麼不是知道該怎麼做是從一個項目中製作兩個包,然後將這兩個包部署到兩個單獨的服務器上。


這裏有兩件事我可以嘗試。在我(是的,專家)看來,這兩個時間都不值得。我會很高興有人向我展示我錯在哪裏。

Visual Studio中的發佈配置文件不僅包括有關要發佈哪些文件和哪些目標的信息,它還包括要構建和部署的解決方案配置。我可以是

  1. 有兩種解決方案配置:「Release」和「ReleaseImage」。 「Images」項目不會在「Release」配置中生成,而「正常」項目不會在「ReleaseImage」配置中生成。 「正常」項目的發佈配置文件將構建「發佈」配置,並且映像的發佈配置文件將構建「發佈映像」配置。我不應該說,讓圖像,CSS和JavaScript與使用它的代碼不在同一個項目中會有多大的痛苦。
  2. 與第一個類似,但將所有內容都保存在單個項目中。這一次,通過兩種配置,手動編輯.csproj文件,將條件放在包含內容的ItemGroup元素上。實際上,單個項目將成爲兩個項目,具體取決於解決方案的配置。我不應該說明每次將新項目添加到項目時必須手動編輯項目文件是多麼不切實際。

我想不出實際的方式做我需要做什麼都做。我希望有人會知道我不知道的一種實用技術 - 也許我沒有意識到Web Deploy 3.5的某些功能。

+2

我不同意在這個問題上downvotes。但是[小酒館]的幾個人(http://chat.meta.stackoverflow.com/rooms/89/tavern-on-the-meta)挑剔了它。 – Mysticial

+0

@Mysticial:感謝您的信息。我不會聊天,所以我不會知道這件事。我原以爲他們會在這裏討論它。 –

+0

@Aristos:是的,我猜我認爲讀者或者知道MSDEPLOY的一些信息,或者認識到他們什麼都不知道,並且不會降低投票率!沒有什麼可嘗試的。沒有內置的項目去多個服務器的概念。沒有發佈只有部分網站的內置概念。實際上沒有什麼可嘗試的。事實證明,沒有人甚至提出了一個諷刺的概念,例如「哦,所以我想你不知道_so和這樣的事情」。 –

回答

5

這應該與創建兩個不同的發佈配置文件「PackageApplication」和「PackageContent」(兩個「Web Deploy Package」配置文件)一樣簡單。

然後,它只是一個定義ExcludeFromPackageFiles物品的事情,你不想要的東西。

PackageApplication.pubxml會是這個樣子:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>Package</WebPublishMethod> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>False</ExcludeApp_Data> 
    <DesktopBuildPackageLocation>package\Application.zip</DesktopBuildPackageLocation> 
    <PackageAsSingleFile>true</PackageAsSingleFile> 
    <DeployIisAppPath /> 
    <PublishDatabaseSettings> 
     <Objects xmlns="" /> 
    </PublishDatabaseSettings> 
    </PropertyGroup> 

    <ItemGroup> 
    <ExcludeFromPackageFiles Include="**/*.js" /> 
    <ExcludeFromPackageFiles Include="**/*.css" /> 
    </ItemGroup> 
</Project> 

而且PackageContent.pubxml看起來像:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>Package</WebPublishMethod> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>False</ExcludeApp_Data> 
    <DesktopBuildPackageLocation>package\Content.zip</DesktopBuildPackageLocation> 
    <PackageAsSingleFile>true</PackageAsSingleFile> 
    <DeployIisAppPath /> 
    <PublishDatabaseSettings> 
     <Objects xmlns="" /> 
    </PublishDatabaseSettings> 
    </PropertyGroup> 

    <ItemGroup> 
    <ExcludeFromPackageFiles Include="**/*.dll;**/*.pdb" /> 
    <ExcludeFromPackageFiles Include="**/*.cshtml" /> 
    <ExcludeFromPackageFiles Include="**/*.aspx;**/*.asax" /> 
    <ExcludeFromPackageFiles Include="**/*.config" /> 
    </ItemGroup> 
</Project> 

您現在有一個Application.zip和Content.zip(完整的.deploy.cmd腳本),您可以將它們部署到您的兩個Web服務器。

買者我不能完全肯定是否的MSBuild腳本將足夠聰明,清除臨時輸出目錄(出\調試\包\ PackageTmp)配置文件之間切換時,所以我建議,包括/t:Clean;Build你的命令行。

+0

謝謝。這是我需要的東西。出於某種原因,我從來沒有想過編輯發佈配置文件。我忘了他們是MSBUILD格式。 –

+1

我得到了這個在VS2010中的工作。需要注意的是,它需要[Visual Studio Web發佈更新](http://msdn.microsoft.com/library/jj161045)。順便說一句,人們也可以使用'' –

相關問題