2011-01-18 5 views
1

私はWinFormsでいくつかの奇妙な要求があるプロジェクトを扱っています。これは、かなり多種多様な環境下の多数の場所にインストールされている既存のビジネスシステムです。この種類の一部は、SQL Serverのバージョンと、特に重要なSQL Server Reporting Servicesのバージョンが混在しています。すべてのユーザーは少なくとも2005年ですが、ユーザーの約50%が2008年の味です。bindingRedirectを変更した後でApp.configを更新しています

残念ながら私は2008年版のRDLで書かれたクライアント側のレポートを実行できる必要があります。現時点では実質的な方法でレポートを変更できないため、2005年版のRDLで書き直すことは選択肢にはなりません。この報告書は、2008年に書かれたように、2008年のReportViewerの規制を必要としているということです。ただし、2008 ReportViewerコントロールは2005 SSRSに接続できません。

私が思いついた解決策は少しハッキリですが、導入された問題の90%が軽減されます。私は2005年版のReportViewerを参照するようにリファレンスを残しましたが、起動時にアプリケーション構成を変更して、ReportViewer.Commonのバージョン9.0.0.0から10.0.0.0に移動するアセンブリバインディングリダイレクトタグを追加し、ユーザーのターゲットレポートサーバーが実行されています。

この解決策は、私にとっては魅力的です。 SSRS 2005を実行しているユーザーは、新しいレポートではなく、既存のレポートにアクセスできます。 SSRS 2008を実行しているユーザーはすべてにアクセスできます。私の唯一の問題は、私が設定データを更新する方法を見つけることができなかったことです。アセンブリのいずれかがロードされる前にこの情報を更新していますが、ConfigurationManager.RefreshSection("runtime")を呼び出しても影響はありません。アプリケーションが再起動すると、適切なアセンブリがロードされますが、この変更をすぐに有効にしたいと思っています。

実行時に実行時にApp.configファイルからバインディングリダイレクト情報を再ロードするようにランタイムを強制する方法について考えていますか?

+0

解決策を投稿するつもりはありませんが、私は[この記事は* .configを変更する方法についての記事です](http://stackoverflow.com/questions/918565/updating-appname-config-file-from-an-custom -installer-class-action)が役に立ちます。これらはインストーラクラスからは同じですが、同じ前提です。 XmlDocumentを使用して、ノードの場所に基づいて値を変更することもできます。 –

+0

@ブラッド:ありがとうございますが、ファイル自体を変更することは問題ではありません。私はそれを行い、働いています(私は実際の 'System.Configuration'クラスを新しいXLinqクラスと組み合わせて使用​​しています)。ここでの問題は、現在実行中のアプリケーションのファイルを変更することです( 'Installer'アクションのような別のアプリケーションではなく)。更新された値を取得するまでランタイムを取得できないようです再起動後。 –

+0

申し訳ありませんが、私はOpenExeConfigurationと直接のXML編集を見て、それがあなたの目的のために働くと思っていました。しかし、[eggheadのこの記事](http://www.eggheadcafe.com/software/aspnet/31133448/configurationmanager-refreshsection-not-refreshing.aspx)によると、getを実行するまではリフレッシュされないと言われています。まだ試しましたか? –

答えて

2

AppDomainが作成されると、バインディングに影響する構成データが修正されます。プライマリADが作成されたとき、コードの実行が開始される前に、デフォルトCLRで発生します。あなたが本当に必死なら、セカンダリAppDomainを作成し、それに別のConfigurationFileを持つカスタムAppDomainSetupを与えることができます。そしてそのADの中に通常の起動コードをロードして実行します。これがどのような副作用を持っているのかは正確には分かりません。

+0

ありがとう、それはちょっと私が恐れていたものです。そのようなフープを飛び越えなければならない場合は、設定を変更してアプリを再起動する必要がある場合は、ユーザーにメッセージを表示するだけです。私はちょうどそれより少しシームレスにすることを望んでいた。 –

関連する問題