2009-10-20 31 views
2

問候,我遵循那些已經實現了WPF基於Web的應用程序或需要完全信任的XAML瀏覽器應用程序(XBAP)的建議,集成服務器,如CruiseControl.NET,以及它們的正常構建/發佈過程。將XBAP集成到ASP.NET Web應用程序,持續集成服務器和發佈過程

具體地說,我感興趣的是:

  1. 簽署這需要完全信任一個XBAP項目。
    PFX文件是否可行?或者在使用CI服務器時這是一種更好的方法嗎?
    (昨天我們打this problem)。

  2. 將XBAP項目發佈到ASP.NET Web應用程序
    2.1這應該在「發佈」配置版本上自動執行嗎?
    2.2發佈的輸出是否應該進入Bin目錄?
    2.3我們是否應該避免。如果可能,部署文件擴展名並重新使用現有的程序集?
    (也有在ASP.NET Web應用程序項目已經使用了許多類庫)

  3. 部署XBAP需要從ASP.NET Web應用程序使用完全信任。

  4. 版本控制XBAP項目
    我們是否應該使用與ASP.NET Web應用程序項目中其他程序集相同的版本?

背景信息:

  • 的XBAP項目是設計報告對我們的ASP.NET Web應用程序使用。它是產品的一個集成部分。
  • 編譯XBAP和Web應用程序項目後,我們使用Web部署項目,然後我們的Wix項目使用該項目的輸出來構建MSI安裝程序。
  • 我們使用CruiseControl.NET進行CI,Subversion for RCS,MSBuild將所有東西粘合在一起,並且整個構建/發佈過程是自動化的,並且需要保持這種方式。

任何意見讚賞!

回答

1

這是我們迄今爲止發現的。當然,這不是'最佳實踐',但它是一個開始:

簽署需要完全信任的XBAP項目。

一旦我想出如何將CI服務器作爲服務運行,如何運行solve the issue,PFX工作正常。

將XBAP項目發佈到ASP.NET Web應用程序中。
2.1這應該在「發佈」配置版本上自動執行嗎?
2.2發佈的輸出是否應該進入Bin目錄?
2.3我們是否應該避免。如果可能,部署文件擴展名並重新使用現有的程序集?

複製到Bin導致IIS7中的RequestFilteringModule出現問題,所以我們沒有使用它。

不是發佈,而是在AfterBuild目標中,我們將輸出複製到ASP.NET Web應用程序中的一個目錄中,該目錄被Subversion忽略,但不會被web部署或wix項目所忽略。 所以我們複製我們需要什麼(DLL,EXE,艙單,XBAP),然後使用一些魔法的MSBuild重命名爲擴展指向.deploy,因爲有些客戶可能會阻止.exe或.dll下載:

<Target Name="AfterBuild"> 
    <CallTarget Targets="CopyOutputToDeployWebDir" /> 
</Target> 

<Target Name="CopyOutputToDeployWebDir"> 
    <CreateProperty Value="..\Path\To\Application\Dir"> 
    <Output TaskParameter="Value" PropertyName="DeployWebDir" /> 
    </CreateProperty> 
    <RemoveDir Directories="$(DeployWebDir)" /> 
    <MakeDir Directories="$(DeployWebDir)" /> 
    <ItemGroup> 
    <DeployWebFiles Include="$(OutputPath)*.dll;$(OutputPath)*.exe;$(OutputPath)*.manifest;$(OutputPath)*.xbap" /> 
    </ItemGroup> 
    <Copy SourceFiles="@(DeployWebFiles)" DestinationFolder="$(DeployWebDir)" /> 
    <ItemGroup> 
    <RenameFiles Include="$(DeployWebDir)*.dll;$(DeployWebDir)*.exe" /> 
    </ItemGroup> 
    <Move SourceFiles="@(RenameFiles)" DestinationFiles="%(RenameFiles.FullPath).deploy" /> 
</Target> 

部署需要從ASP.NET Web應用程序使用完全信任的XBAP。

目前看起來我們需要在受信任的根證書存儲區和受信任的發佈者證書存儲區中安裝簽名密鑰。

版本控制XBAP項目。

我們希望同樣的XBAP應用程序版本爲我們的ASP.NET Web應用程序的版本(在本例中,屬性的AssemblyFileVersion),因此,我們最後繞過正常ApplicationVersion財產的做法,從我們覆蓋它集信息文件共享其所使用的產品中的所有組件:

<!-- Note that this value is overridden in BeforeBuild target --> 
<ApplicationVersion>0.0.0.0</ApplicationVersion> 
<!-- ... --> 
<Target Name="BeforeBuild"> 
    <CallTarget Targets="SetApplicationVersion" /> 
</Target> 
<!-- Always set application version to product version --> 
<Target Name="SetApplicationVersion"> 
    <UpdateVersion Attribute="AssemblyFileVersion" AssemblyInfo="..\ProductAssemblyInfo.cs"> 
    <Output PropertyName="ApplicationVersion" TaskParameter="Version" /> 
    </UpdateVersion> 
</Target> 

UpdateVersion是一個自定義的MSBuild任務,可以閱讀或在集信息寫入文件的版本屬性值。在網上寫或找些東西來做類似的事情並不難。

+0

這對我來說是非常有用的信息,但是,我正在爲MSBuild實際的「發佈」目標努力。你如何調用簽名XBAP和依賴文件的Publish例程? – grenade 2010-08-11 07:00:45

相關問題