天天看點

Silverlight 4 項目資源檔案的Build Action

 Copy to OutPut Directory

先說簡單的,資源檔案的 Copy to OutPut Directory 屬性, 這個屬性有如下三個選項:

Action 說明 備注
Do not copy 不做資料同步
Copy always 每次都會被同步過去
Copy if newer 當有新版本存在時,才會被同步過去

Build Action

Build Action 屬性則複雜多了, 下面是VS2010中, Silverlight 4 項目資源檔案的Build Action 屬性截圖:

Silverlight 4 項目資源檔案的Build Action
Action 說明
None

資源既不會被內建到程式集内,也不會打包到xap包中。不過我們可以通過設定CopyToOutputDirectory選項讓其自動拷貝到xap包所在目錄。 這種情況下, 通路這個圖檔的相對Uri需要以"/"開始。 

适用場景:在大多數情況下,我們希望把video/audio檔案放到xap的外面,因為這種檔案一般都比較大,會影響silverlight應用的加載,而且一般的視訊音頻檔案都是壓縮格式的,放到xap中也不會起到減少他們檔案大小的作用。 類似圖檔視訊這種資源檔案生成操作為None時和他們沒有被添加到項目裡是一樣的,都可以用絕對Uri進行引用。

Compile 不适合用于資源檔案。類檔案要用"Compile"生成操作, 就是指項目裡.cs或.vb檔案。
Content 資源會被打包在Xap包裡面。這種情況下, 通路這個圖檔的相對Uri需要以"/"開始。在這種方式下,如果沒有在xap中找到圖檔檔案,那麼silverlight會自動從目前xap應用所在的檔案夾下來找所需圖檔檔案, 如果還沒有找到那麼就觸發ImageFailed事件, 這種方式比較适合在多個程式集引用相同檔案時采用。
Embedded Resource 這種方式會把檔案嵌入到程式集中,Silverlight無法通過Uri引用在xaml和C#裡對這個檔案進行使用,微軟不建議在Silverlight采用這種方式在程式集裡嵌入資源。如果有這種需求可以用Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(string path)相關的方法得到檔案的Stream引用。
ApplicationDefinition Silverlight程式的入口xaml檔案(預設就是App.xaml)應該設定為這個"應用定義"。其他檔案都不适合用這個。
Page 不适合用于資源檔案。所有的使用者控件,頁面和子窗體(Usercontrol/Page/Childwindow)的xaml檔案應該采用的生成操作。 如果改為别的方式那麼會導緻背景對應的代碼檔案無法連結到這個xaml檔案。 采用"Page" build action時xaml裡的錯誤會導緻工程無法正确生成。
CodeAnalysisDictionary 代碼分析使用,Silverlight中可以忽略
Resource 資源會被打包在程式集内部。 選擇這種生成方式後,該資源檔案會被嵌入到該應用的程式集中,就是說打開生成的xap是看不到這個檔案的。 可以用相對于目前的XAML檔案的相對Uri通路,<Image Source="sl.png" />或是<Image Source="./sl.png" />, 在子檔案夾裡的可以用<Image Source=”./images/ sl.png” />通路到。最保險的方式是采用特有的程式集資源URI通路,格式為 <Image Source="/{assemblyShortName};component/ sl.png "/>,這種方式還可以引用到xap中的其他程式集中的圖檔。這種生成方式的系統資源可以直接用Application.GetResourceStream(uri).Stream在代碼裡來得到。
SplashScreen "SplashScreen"是這個選項是WPF的啟動畫面使用的。Silverlight啟動加載畫面是用的其他方式實作的,是以在Silverlight裡不要用這個方式。
EntityDeploy 這個是EntityFramework采用的生成方式,在Silverlight裡是沒用。

繼續閱讀