Localization SSRS定位

Localization SSRS定位,localization,ssrs-2008,gac,embedded-resource,Localization,Ssrs 2008,Gac,Embedded Resource,我正在尝试本地化SSRS报告。我有一个DLL,它使用ResourceManager访问嵌入在DLL中的资源文件。我的报告引用了dll。dll已签名并具有强名称。dll和资源文件的dll在MicrosoftVisualStudio9.0/Common7/IDE/PrivateSassemblies和Microsoft SQL Server\MSRS10.REPORTSERVER\Reporting Services\REPORTSERVER\bin中编译和保存。资源dll也使用gacutil安装在

我正在尝试本地化SSRS报告。我有一个DLL,它使用ResourceManager访问嵌入在DLL中的资源文件。我的报告引用了dll。dll已签名并具有强名称。dll和资源文件的dll在MicrosoftVisualStudio9.0/Common7/IDE/PrivateSassemblies和Microsoft SQL Server\MSRS10.REPORTSERVER\Reporting Services\REPORTSERVER\bin中编译和保存。资源dll也使用gacutil安装在GAC中

SSRS偶尔会正确地找到它需要的资源密钥并显示它。但是,当更改资源文件以添加更多密钥和值时,我无法让SSR访问新添加的文件。我重复了上述所有步骤,甚至在GAC中卸载并安装了这些资源。但我还是不能让它工作


知道我错过了哪一步吗?很明显,这个过程是有效的,我只是没有重复我需要做的事情

您是否正在重建和重新部署所有附属程序集以及每个更新(包括在GAC中)


如果不是,那么问题似乎是由程序集版本控制引起的。有一种方法可以应用于主程序集以帮助解决此问题。尽管每次部署更新时重建/重新指定/重新部署所有附属程序集可能会更容易。

对于那些对稍微不同的方法感兴趣的人,您可能希望尝试使用不使用标准资源管理,而是依赖于简单文件IO的本地化程序集。这使得对现有resx文件进行更改或添加新文件的问题更少。您可以添加或更改resx文件,并立即能够检索报告中使用的值。我遵循这个示例,只做了一些小的调整,并且对结果非常满意:

不过需要注意的是,添加新代码组时需要遵循的步骤有一点不足,即如果将新代码组放置在未命名UnionCodeGroup(Url为=“$CodeGen$/*”)之外的任何位置,则访问自定义程序集的尝试将失败

经过大量挖掘,我在一个msdn页面上找到了这一点的确认(请参阅“扩展代码组元素的放置”部分)。他们的措辞是“建议这样做”,但从我的测试来看,至少在直接在报表服务器上测试时,我会说这是必需的:

wix中用于rssrvpolicy.config文件中此位置的xpath为:

//PolicyLevel/CodeGroup/CodeGroup[\[]@class='FirstMatchCodeGroup'[\]]/CodeGroup[\[]@PermissionSetName='ReportLocalization'[\]]
下面是一个示例,说明如何在WiX中使用util:XmlConfig扩展来完成此操作:

    <DirectoryRef Id="TARGETDIR">
        <Component Id="I18N_RSSRVPOLICY_CONFIG" Guid="some GUID">
            <util:XmlConfig
                Id="RS_i18n_PermissionSet_remove_if_already_exists"
                File="[SQLREPORTINGSERVICESPATH]ReportServer\rssrvpolicy.config"
                Action="delete"
                On="install"
                ElementPath="//NamedPermissionSets"
                VerifyPath="//NamedPermissionSets/PermissionSet[\[]@Name='ReportLocalization'[\]]"
                Node="element"
                Sequence="100">
            </util:XmlConfig>
            <util:XmlConfig
                Id="RS_i18n_PermissionSet_add"
                File="[SQLREPORTINGSERVICESPATH]ReportServer\rssrvpolicy.config"
                Action="create"
                On="install"
                ElementPath="//NamedPermissionSets"
                VerifyPath="//NamedPermissionSets/PermissionSet[\[]@Name='ReportLocalization'[\]]"
                Node="document"
                Sequence="101">
                <![CDATA[
        <PermissionSet class="NamedPermissionSet" version="1" Unrestricted="true" Name="ReportLocalization" Description="A special permission set that allows Execution and Assertion" />
        ]]>
            </util:XmlConfig>
            <util:XmlConfig
                Id="RS_i18n_CodeGroup_remove_if_already_exists"
                File="[SQLREPORTINGSERVICESPATH]ReportServer\rssrvpolicy.config"
                Action="delete"
                On="install"
                ElementPath="//PolicyLevel/CodeGroup/CodeGroup[\[]@class='FirstMatchCodeGroup'[\]]"
                VerifyPath="//PolicyLevel/CodeGroup/CodeGroup[\[]@class='FirstMatchCodeGroup'[\]]/CodeGroup[\[]@PermissionSetName='ReportLocalization'[\]]"
                Node="element"
                Sequence="102">
            </util:XmlConfig>
            <util:XmlConfig
                Id="RS_i18n_CodeGroup_add"
                File="[SQLREPORTINGSERVICESPATH]ReportServer\rssrvpolicy.config"
                Action="create"
                On="install"
                ElementPath="//PolicyLevel/CodeGroup/CodeGroup[\[]@class='FirstMatchCodeGroup'[\]]"
                VerifyPath="//PolicyLevel/CodeGroup/CodeGroup[\[]@class='FirstMatchCodeGroup'[\]]/CodeGroup[\[]@PermissionSetName='ReportLocalization'[\]]"
                Node="document"
                Sequence="103">
                <![CDATA[
          <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="ReportLocalization" Name="Verint.SSRS.Localization" Description="This grants the Verint.SSRS.Localization.dll ReportLocalization Permissions">
            <IMembershipCondition class="UrlMembershipCondition" version="1" Url="UPDATE_ME"/>
          </CodeGroup>]]>
            </util:XmlConfig>
            <util:XmlConfig
                Id="RS_i18n_CodeGroup_update"
                File="[SQLREPORTINGSERVICESPATH]ReportServer\rssrvpolicy.config"
                Action="create"
                On="install"
                ElementPath="//IMembershipCondition[\[]@Url='UPDATE_ME'[\]]"
                Name="Url"
                Value="[SQLREPORTINGSERVICESPATH]ReportServer\bin\Verint.SSRS.Localization.dll"
                Node="value"
                Sequence="104">
            </util:XmlConfig>
            <util:XmlConfig
                Id="RS_i18n_REDP_CodeGroup_update"
                File="[SQLREPORTINGSERVICESPATH]ReportServer\rssrvpolicy.config"
                Action="create"
                On="install"
                ElementPath="//CodeGroup[\[]@Name='Report_Expressions_Default_Permissions'[\]]"
                Name="PermissionSetName"
                Value="FullTrust"
                Node="value"
                Sequence="105">
            </util:XmlConfig>
        </Component>
    </DirectoryRef>

]]>
]]>

我建议备份原始配置文件(使用WiX或自定义操作)。这可以使卸载变得更容易,因为您只需更换这些原件,还因为您可以反复测试,直到它达到您想要的效果。祝你们好运

VS2008中的错误要求您在每次卫星程序集更改后关闭应用程序。您能否指出您用于执行SSRS本地化报告的文章?您能否发布您如何使用WiX部署该报告?谢谢为什么不使用此XPath查找引用的节点//代码组[IMembershipCondition[@Url='$CodeGen$/*']]@paulwhit,你能把这个作为一个问题发布吗,我会尽力在那里添加评论/答案。如果允许的话,把链接贴回这里。我的大部分工作都是基于上面提到的codeproject,所以如果你仔细阅读并遇到障碍,你的问题可能基于这些。我想我记得codeproject的海报也能接受问题。祝你好运!我决定只通过自定义可执行文件而不是wix@paulwhit,对于前面关于使用“$CodeGen$/*”xpath的问题,您的意思是用于放置ReportLocalization代码组吗?WiX文档很少,但据我所知,当您添加一个元素(使用Action=“create”On=“install”)时,它会将其附加到ElementPath的childlist的末尾。使用自定义操作执行此操作会更容易一些,所以希望您已经实现了这一点!