2012-06-21 71 views
0

我在嘗試本地化SSRS報告。我有一個使用ResourceManager訪問嵌入在DLL中的資源文件的DLL。我的報告有一個dll的參考。該dll經過簽名並被強力命名。該DLL和資源文件的DLL編譯和MicrosoftVisualStudio9.0/Common7/IDE/PrivateAssemblies和Microsoft SQL Server \ MSRS10.REPORTSERVER \ Reporting Services \ ReportServer \ bin。資源dll也使用gacutil安裝在GAC中。使用SSRS本地化

有時SSRS會正確找到它需要的資源鍵並顯示它。但是,在更改資源文件以添加更多密鑰和值時,我無法使SSRS訪問新添加的文件。我重複了上述所有步驟,甚至將這些資源卸載並安裝到了GAC中。但我仍然無法實現它的工作。

任何想法我錯過了什麼步驟?顯然這個過程是有效的,我只是不重複我需要的東西。

+0

VS2008中的錯誤要求您在每次衛星裝配更改後關閉應用程序。 –

+0

你能指出你用來做SSRS報告本地化的文章嗎? –

回答

0

是否將您的每個更新(包括GAC中)的所有附屬程序集重新構建和重新部署?

如果沒有,這聽起來像問題是由於彙編版本控制。有一個SatelliteContractVersion attribute,你可以應用到你的主要程序集來解決這個問題。雖然每次部署更新時重建/重新分配/重新部署所有衛星程序集可能會更容易。

1

對於那些對稍有不同的方法感興趣的人,您可能想嘗試使用不使用標準資源管理的本地化組合,而是依賴於簡單的文件IO。這使得對現有的resx文件進行更改或添加新文件的問題較少。您可以添加或更改resx文件,並立即能夠檢索報告中使用的值。我跟着這個例子中,只有輕微的調整,並已非常滿意的結果: http://www.codeproject.com/Articles/294636/Localizing-SQL-Server-Reporting-Services-Reports

一個說明雖然添加新的代碼組都缺少一個位,如果你在任何地方放置新代碼組時要遵循的步驟除非未命名的UnionCodeGroup(它是Url =「$ CodeGen $/*」的那個)之後,您嘗試訪問自定義程序集的嘗試將失敗。

經過大量的挖掘,我能夠在其中一個msdn頁面上找到對此的確認(請參閱「用於擴展的CodeGroup元素的放置」一節)。其措辭是,「建議」,但是從我的測試中,我會說這是必需的,直接在報表服務器上進行測試,至少在: http://msdn.microsoft.com/en-us/library/ms152828.aspx

中的XPath在威克斯使用在rssrvpolicy這個位置。配置文件是:

//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的或自定義操作)。這可以使卸載更容易,因爲您可以更換這些原件,也可以一遍又一遍地測試它,直到它做到您想要的。祝大家好運!

+0

你可以發佈你如何使用WiX來部署它嗎?謝謝! – paulwhit

+0

爲什麼不使用此XPath來查找引用的節點?// CodeGroup [IMembershipCondition [@Url ='$ CodeGen $/*']] – paulwhit

+0

@paulwhit,你可以發佈這個問題,我會盡我所能添加評論/答案。如果允許的話,將鏈接發回到這裏。我的大部分工作都基於上面提到的codeproject,所以如果你仔細閱讀並且遇到困難,那麼你的問題可能會基於這些問題。我想我還記得codeproject海報也接受問題。祝你好運! – idclaar