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 が新しく追加されたファイルにアクセスできなくなります。上記の手順をすべて繰り返し、リソースをアンインストールして GAC にインストールしました。それでも私はそれを機能させることができません。

私が見逃しているステップは何ですか?明らかにプロセスはうまくいっています。私は、あるべきことを繰り返しているわけではありません。

4

2 に答える 2

1

少し異なるアプローチに関心がある場合は、標準のリソース管理を使用せず、代わりに単純なファイル IO に依存するローカリゼーション アセンブリを使用してみてください。これにより、既存の resx ファイルを変更したり、新しいファイルを追加したりする際の問題が軽減されます。resx ファイルを追加または変更して、レポートで使用する値をすぐに取得できます。私はこの例に従いましたが、微調整だけで結果に非常に満足しています: http://www.codeproject.com/Articles/294636/Localizing-SQL-Server-Reporting-Services-Reports

ただし、新しい CodeGroup を追加するときの手順には、新しい CodeGroup を名前のない UnionCodeGroup (Url="$CodeGen$/*" を持つもの) 以外の場所に配置する場合に少し欠けていることに注意してください。カスタム アセンブリへのアクセスは失敗します。

いろいろ調べた結果、msdn ページの 1 つでこれを確認することができました (「拡張機能の CodeGroup 要素の配置」セクションを参照)。彼らの言い回しは「推奨される」というものでしたが、私のテストから、少なくともレポートサーバーで直接テストする場合は必須だと思います: http://msdn.microsoft.com/en-us/library/ms152828.aspx

rssrvpolicy.config ファイル内のこの場所に対して wix で使用する xpath は次のとおりです。

//PolicyLevel/CodeGroup/CodeGroup[\[]@class='FirstMatchCodeGroup'[\]]/CodeGroup[\[]@PermissionSetName='ReportLocalization'[\]]

util:XmlConfig 拡張機能を使用して WiX でこれを行う方法の例を次に示します。

    <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 またはカスタム アクションを使用)。これにより、元のファイルを置き換えるだけで済むため、アンインストールが簡単になります。また、必要な動作をするまで何度でもテストできるためです。頑張ってください!

于 2013-04-18T23:31:55.887 に答える
0

各更新プログラム (GAC を含む) ですべてのサテライト アセンブリを再構築および再展開していますか?

そうでない場合、問題はアセンブリのバージョン管理によるものと思われます。この問題を解決するためにメイン アセンブリに適用できるSatelliteContractVersion 属性があります。ただし、更新プログラムを展開するたびにすべてのサテライト アセンブリを再構築/再署名/再展開する方が簡単な場合があります。

于 2012-06-22T09:57:00.960 に答える