機能がアクティブ化されたときにWebアプリケーションのApp_GlobalResourceフォルダーにリソースファイルを展開するための最良の方法を知っている人はいますか?
5 に答える
Thanks all for your answers, but as the best solution for SharePoint 2010 is the follow:
- Add New Item > Module
- Copy (or) Add your resource files there
- Change "Deployment Type" property of each resource file to appGlobalResource
- Change "Deployment Location > Path" property to empty so the resource file deploys properly to "App_GlobalResources" under your web application
したがって、この質問の最後のフォローアップとして、このプロセスを完全に自動化するために最終的に行ったことを次に示します。
提案されたように、マニフェスト ファイルで ApplicationResourceFile 要素を使用しました。
<?xml version="1.0" encoding="utf-8"?>
<Solution SolutionId="{185E973C-3A10-4e2a-9E0F-DC14414551F9}"
xmlns="http://schemas.microsoft.com/sharepoint/"
DeploymentServerType="WebFrontEnd">
<ApplicationResourceFiles>
<ApplicationResourceFile Location="yourappname.resx"/>
<ApplicationResourceFile Location="yourappname.en-US.resx"/>
</ApplicationResourceFiles> ...
</Solution>
これにより、実際にファイルが「リソース」フォルダーに配置されました。したがって、次のようなコードでそこからリソースにアクセスするだけです。
string appPath = HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath);
ResourceManager resX = ResourceManager.CreateFileBasedResourceManager("ResourceFileName", appPath + "resources", null);
SPSecurity.RunWithElevatedPrivileges(delegate()
{
AddResource(resX, "DefaultTextBoxLabelText");
このコードをコンストラクターで実行し、リソース ファイルのエントリをローカル ディクショナリに追加します。作成された新しい "resources" フォルダーには AppPool アカウントのみがアクセスできるため、RunWithElevatedPrivileges を使用する必要があります。
コードを実行し、各WebフロントエンドサーバーのApp_GlobalResourcesフォルダーにファイルをコピーするSharePointタイマージョブを開始しない限り、アプリケーションリソースファイルを機能を介して展開することはできません。
代わりに、SharePointソリューションフレームワークに.RESXファイルを各サーバーのApp_GlobalResourcesフォルダーに展開させる必要があります。WSPソリューションパッケージのmanifest.xmlファイルで、次のようにアプリケーションリソースファイルを指定できます。
<?xml version="1.0" encoding="utf-8"?>
<Solution SolutionId="{185E973C-3A10-4e2a-9E0F-DC14414551F9}"
xmlns="http://schemas.microsoft.com/sharepoint/"
DeploymentServerType="WebFrontEnd">
<ApplicationResourceFiles>
<ApplicationResourceFile Location="yourappname.resx"/>
<ApplicationResourceFile Location="yourappname.en-US.resx"/>
</ApplicationResourceFiles>
...
</Solution>
STSADMまたはサーバーの全体管理を使用してWSPソリューションパッケージを展開すると、SharePointソリューションフレームワークは、ソリューションの展開先として決定したすべてのWebアプリケーションのApp_GlobalResourcesフォルダーにこれらのファイルを展開するタイマージョブを開始します。
SharePoint 2010 の場合、XML ノード名を変更して、C:\inetpub\wwwroot\wss\VirtualDirectories\80 の Resource フォルダーではなく、新しい App_GlobalResources フォルダーにコピーされるようにする必要があります。MSDN リンク: http://msdn.microsoft.com/ en-us/library/ms463158.aspx
例:
<Solution SolutionId="{8a2f91f2-db85-4eb3-8e7c-330f05246e1a}"
DeploymentServerType="WebFrontEnd"
xmlns="http://schemas.microsoft.com/sharepoint/">
<ApplicationResourceFiles>
<App_GlobalResourceFile Location="yourResourceFile.resx"/>
</ApplicationResourceFiles>
最近、ファームのインストールで同じ問題に遭遇しました。残念ながら、マニフェストに ApplicationResourceFile エントリを追加しても、リソースは Resources-folder にのみ取得されます。
リソース ファイルをリソースから App_GlobalResources に stsadm -o copyappbincontent (すべてのフロント エンド サーバーで発行する必要があります) を使用して手動で展開できますが、ここで概説するように、ファイルを手動でコピーするタイマー ジョブを作成することになりました。