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 屬性截圖:

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裏是沒用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章