少し異なるアプローチに関心がある場合は、標準のリソース管理を使用せず、代わりに単純なファイル 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 またはカスタム アクションを使用)。これにより、元のファイルを置き換えるだけで済むため、アンインストールが簡単になります。また、必要な動作をするまで何度でもテストできるためです。頑張ってください!