2012-03-15 16 views
6

今日私は少しの事件を経験しました。私たちは様々な設定のためのかなり標準的なweb.configトランスフォーム設定を持つプロジェクトを持っています。変換の値が存在しないときに失敗したweb.config変換

<endpoint address="http://myserver/myservice1.svc/basicHttp" 
binding="basicHttpBinding" contract="MyAssembly.IItem" name="DataAccessEndPoint" 
kind="" endpointConfiguration="" /> 
<endpoint address="http://myserver/myservice2.svc/basicHttp" 
binding="basicHttpBinding" contract="MyAssembly.IItem2" name="LoggingEndPoint" 
kind="" endpointConfiguration="" /> 

そして、このように変換::次のようになり、当社のDAOサービスへのアクセスを制御する部分があり

<endpoint address="http://mytestserver/myservice1.svc" name="DaoEndPoint" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 
<endpoint address="http://mytestserver/myservice2.svc" name="LoggingEndPoint" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> 

うまくいけば、ここでエラーを発見しています - DaoEndPointの名前を一致しません。残念ながら、それを作成した開発者はライブサービスに対してローカルでデバッグしていませんでした。これにより、テストのデプロイメントがになりました。が生存しています。私たちは幸いにもそれをかなり素早く取り上げましたが、ここでは極端な痛みの可能性を見ることができます!

トランスフォームファイルを作成するときに私はあなたの意図を考えていました。変換するトランスフォームを入れたら、何かです。したがって、DaoEndPoint変換があっても、メインの.configファイルに一致するDaoEndPoint項目がなければ、変換(したがって展開)が失敗した場合にはうれしいでしょう。

私は人々の意見のために取り組んでいるのですが、これは役に立ちそうですか?それは普通の過労でしょうか?私は完全にポイントを逃していますか?

また、そこにはこれがありますか?

+0

例外を引き起こすものは何も知りませんが、役立つ可能性があります。メインweb.configに値を空白のままにしておきたい場合があります。変換されない場合は、アプリケーションですぐにエラーが発生します。有用ではありませんが、意図しないPRODアクセスを防止します。 – dbugger

+0

この問題は、値を追加せずにローカルでデバッグすることができないため、devがその値を再び忘れると元の問題に戻ります... –

答えて

1

Sayed Ibrahim Hashimiのthis questionに対する偉大な答えを参照してください。これは、継承するカスタムクラスを作成することを伴います。 Microsoft.Web.Publishing.Tasks.Transform。同じテクニックを使用できますが、代わりにLocatorクラスを継承して、ターゲットノードと一致することができない場合は例外をスローします。

私は実際に自分自身をテストし、公開中に例外をスローすることができました。しかし、私のカスタムロケータクラス(MyMatch)は、例外をスローする以外に実際に何もしませんでした。 Matchクラスを模倣するメソッドをオーバーライドして継承できないことを最終的に確認する適切な場所を見つけ出すことは、相当な作業です。

とにかく、少なくとも、公開が失敗する場所を設定したり、トランスフォームに何の効果もなかったときに警告を表示したりするオプションがあると便利だと思います。

+0

Brill、これは単なる私が探していたことを、私は試して何かを集め、次の数週間でgithubに投稿します。 (途中で遅く返事をして、インターネットで休暇中にお詫びします!) –

関連する問題