在激活时将资源文件部署到App_GlobalResource文件夹

时间:2008-11-17 16:11:20

标签: sharepoint resources

在激活某项功能时,是否有人知道将资源文件部署到Web应用程序的App_GlobalResource文件夹的最佳方法?

5 个答案:

答案 0 :(得分:8)

感谢大家的回答,但是对于SharePoint 2010的最佳解决方案如下:

  • 添加新项>模块
  • 复制(或)在那里添加资源文件
  • 将每个资源文件的“部署类型”属性更改为appGlobalResource
  • 将“部署位置>路径”属性更改为空,以便资源文件正确部署到您的Web应用程序下的“App_GlobalResources”

enter image description here

答案 1 :(得分:3)

所以,作为这个问题的最后一个后续内容,我们最终完成了这个过程的全部自动化。

我们按照建议使用清单文件中的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>

这确实将文件放入“resources”文件夹中。因此,我们只需从代码中访问资源,如下所示:

string appPath = HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath);
ResourceManager resX = ResourceManager.CreateFileBasedResourceManager("ResourceFileName", appPath + "resources", null);

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    AddResource(resX, "DefaultTextBoxLabelText");

我们在构造函数中运行此代码,并将资源文件中的条目添加到本地字典中。您必须使用RunWithElevatedPrivileges,因为创建的新“resources”文件夹只能由AppPool帐户访问。

答案 2 :(得分:2)

除非您执行某些代码并启动将文件复制到每个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文件夹中。

答案 3 :(得分:2)

对于SharePoint 2010,您需要更改XML节点名称,以便它将复制到新的App_GlobalResources文件夹而不是C:\ inetpub \ wwwroot \ wss \ VirtualDirectories \ 80中的Resource文件夹 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>

答案 4 :(得分:0)

我们最近在我们的服务器场安装上遇到了同样的问题。不幸的是,在清单中添加ApplicationResourceFile条目只会将您的资源获取到Resources-folder。

虽然您可以使用stsadm -o copyappbincontent(必须在每个前端服务器上发布)将资源文件从Resources手动部署到App_GlobalResources,但我们最终创建了一个计时器作业来手动复制文件,如{{3}所述}: