SharePoint 2010:部署.resx(資源)文件到App_GlobalResources的簡單方法


SharePoint 2010中的資源文件

通常,在我們的自定義解決方案中,資源文件主要用於實現本地化。
同樣在 SharePoint 2010中, 我們的定制開發過程也會涉及類似的本地化過程,因此開發人員不可避免的需要和各種特定語言的resx文件打交道。在開發SharePoint解決方案時,resx文件可以通過名為“Resources”SharePoint映射文件夾來實現。在此路徑下存放的資源文件可以通過SPUtility.GetLocalizedString 方法來訪問。但畢竟,我們會遇到很多和特定用戶界面相關的定制化工作。而SharePoint 2010本身是基於ASP.NET 技術實現的。所以任何包含了資源引用的標記都會從App_GlobalResources文件夾下搜索.resx文件。對於SharePoint來說,該文件夾位於 intepub\wwroot\wss\<<Web應用程序目錄>> 這個路徑下。
這一點就給需要要使用傳統ASP.NET UI資源本地化方式進行開發的SharePoint開發人員帶來了額外的部署上的開銷。我們需要確保一個resx文件必須同時被部署在經典的14目錄App_GlobalResources下。

有很多辦法可以部署資源文件。比如:
•    編寫一個事件接收器程序(event handler)來復制 resx 文件
•    自定義timer job
•    在部署用到的PowerShell 腳本中實現
•    手工復制粘貼,等等....

但是,當我們的解決方案需要卸載,更新時該怎么辦?更慘的是,如果我們的SharePoint環境還是多服務器的場環境。這時,手工部署resx 文件的工作就會變得繁瑣且十分容易出錯。

SharePoint 2010類型的項目支持稱為“元素(Elements)”的功能(Feature)。通過元素我們可以部署一系列的文件到指定的位置。下面,我們就看一下如何使用元素來部署resx 文件,使其能夠放在 App_GlobalResources 文件夾下。這么做至少有以下幾點好處:

•    不需要為了部署單獨寫自定義的代碼
•    Resx 文件被統一打包到了WSP文件中
•    不需要擔心升級和卸載,因為SharePoint 自動為我們處理
•    非常適合多服務器的SharePoint場環境下部署
•    無手工步驟

步驟

•    新建一個 空白SharePoint 2010 項目。名為 ResxDeployment
•    選擇一個本地站點進行調試,部署類型選擇 部署為場解決方案
 

•    在解決方案資源管理器里,右擊 ResxDeployment 項目,添加一個 SharePoint 映射文件夾
•    在 添加 SharePoint 映射文件夾 對話框中, 選擇Resources 並點確定

•    在解決方案資源管理器里,右擊 ResxDeployment 項目,添加一個新建項...
•    在Resources文件下添加一些示例 resx 文件

 •    在解決方案資源管理器里,右擊 ResxDeployment 項目,添加一個新建項。添加一個 空元素 並將其命名。這里我們叫做 App_GlobalResources
 

•    在解決方案資源管理器里,點擊顯示所有文件圖標,來查看所有的文件。打開SharePointProjectItem.spdata 文件,該文件位於 App_GlobalResources 結點下。

 •    在xml文件中添加資源文件的相關信息,包括SourceTypeType 指定成AppGlobalResourceSource 指定 resx 文件的相對路徑。 如下面的例子所示:

<?xml version="1.0" encoding="utf-8"?>
<ProjectItem Type="Microsoft.VisualStudio.SharePoint.GenericElement" DefaultFile="Elements.xml" SupportedTrustLevels="All" SupportedDeploymentScopes="Web, Site, WebApplication, Farm, Package" xmlns="http://schemas.microsoft.com/VisualStudio/2010/SharePointTools/SharePointProjectItemModel">
  <Files>
    <ProjectItemFile Source="Elements.xml" Target="App_GlobalResources\" Type="ElementManifest" />
    <ProjectItemFile Source="..\Resources\Contoso.resx" Type="AppGlobalResource"/>
    <ProjectItemFile Source="..\Resources\Contoso.zh-CN.resx" Type="AppGlobalResource"/>
    <ProjectItemFile Source="..\Resources\Contoso.ko-KR.resx" Type="AppGlobalResource"/>
    <ProjectItemFile Source="..\Resources\Contoso.en-US.resx" Type="AppGlobalResource"/>
    <ProjectItemFile Source="..\Resources\Contoso.ja-JP.resx" Type="AppGlobalResource"/>
  </Files>
</ProjectItem>

•    在解決方案資源管理器里,雙擊默認的Feature1,打開Feature設計器。將我們剛剛創建的元素加到右側。使其包含到Feature中。

•    在解決方案資源管理器里,右擊 ResxDeployment 項目,選擇部署
•    如果一切正常,該解決方案將被部署到指定的web 應用程序。同時,通過檢查,我們看到resx 文件同時部署到了 App_GlobalResources14\Resources 文件夾下面。

需要注意的要點

資源文件被部署到了兩個不同的位置。當然你也可以直接在元素的文件夾中添加resx文件。
1.    在這個例子中,我們不需要在Visual Studio里把文件從Resources 映射文件夾拷貝到 App_GlobalResources 元素文件夾。實際上只有一份resx 文件, 所以我們不需要擔心同時修改多個位置的問題。
2.    每添加一個 resx 文件, SharePointProjectItem.spdata 文件中都應該做相應的更新。否則該文件不會被復制到web應用程序的App_GlobalResources 文件夾下。
3.    請為該項目對應的功能設置適當的范圍(Scope)。 通常我們設置成web應用程序這一級別。

通過以上的方法,我們就可以利用SharePoint自帶的功能框架來部署resx 文件到 App_GlobalResources

參考資料

Easy way to deploy .resx (resource) files under App_GlobalResources folder in SharePoint 2010


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM