Localization SSRS定位
我正在尝试本地化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中卸载并安装了这些资源。但我还是不能让它工作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安装在
知道我错过了哪一步吗?很明显,这个过程是有效的,我只是没有重复我需要做的事情 您是否正在重建和重新部署所有附属程序集以及每个更新(包括在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的末尾。使用自定义操作执行此操作会更容易一些,所以希望您已经实现了这一点!