コンテンツへスキップ
ものがたり
戻る

2005-03-18

Commons.Xml.Relaxng.dll for MS.NET

単純にサンプルコードと同じディレクトリに置いてサンプルを実行したら動きませんでした…どうやらxs:NOTATIONが単純に参照できないことが原因でXsdDatatypeProviderが拒否られていたみたい。直したというよりxs:NOTATIONを無視るようにしただけですが、これでとりあえず動きます。

ソースコードのversioningとwarningの上手なつきあい方

なかなか悩みどころです。

もし同じソースがバージョン1からバージョン6までで共有されているとして、↓みたいなディレクティブをもつソースがあるとします。

#if VERSION_2  

#if VERSION_3  

#if VERSION_4  

#if VERSION_5  

#if VERSION_6

このとき、それぞれのバージョンでしか使用されないフィールドがあったりすると、cscはwarningメッセージを出力するわけです。たとえばこんな感じ:

System.Xml\XmlTextWriter.cs(86,8): warning CS0649: Field ‘System.Xml.XmlTextWriter.checkCharacters’ is never assigned to, and will always have its default value false

で、ここに今うるさい開発者なり管理者なりがいて、「warningは全て消すべきだ」と言ったとします。どうすればいいでしょうか。

それぞれのバージョンごとにフィールドを並べて

#if VERSION_2  

  int foo; // version2でしか使わない  

#endif

こんな感じで書いていきます? バージョン6まで。これは読みにくいと思います。

じゃあ、partial typesを使えば解決でしょうか? partial typesは、バージョン毎に機能追加するだけのソースを管理する場合には、有効かもしれません。でも、ソースは追いにくいと思います。特にあっち行ったりこっち行ったりがある場合は。そもそもプロジェクトによっては使わない方針を立てているかもしれません(たとえばmcsは基本的に使いません)。

ていうかそんな寿命の長いプロジェクトは存在しないだろう? うーんそうかもしれません。

そんなわけで、個人的には /nowarn:649 とか使ってごまかしたいところなんですが、これは何も分かっていない管理者を黙らせるのでもない限り何の解決にもなってないんですよねー。困ったものです。

とりあえずprivate methodsにまでnot in useのチェックをかけようっていうMarekの設計はイケてないと僕は確信しているし(いや彼は非常に熱心で細かいところにも気がつく優秀な人なんだけど)、cscとは違うぜって書いているのを見た時点でどうせ問題があるだろうと思ったから、そう言う話はキッチリとおもてでケリをつけるべきだと思って「おもてに投げてよ」と書いたのだけど、なぜか最近は、argurableなfixについてパブリックなMLを回避して個別の開発者に送るような風潮があって、僕は非常によろしくないなあと思っている。オープンソースってそういうものですかねえ。

どうも最近そういうのばかりなのだ。やれXmlTextWriterにxmlns=”…”を出力させるときはprefixを”xmlns”にしてlocalNameを""にしろだとか、XmlEntityReferenceのChildNodesはInsertBefore()やAppendChild()の時にはfillしないようにしろだとか、問題のあるパッチは個人宛に送られて、おかげで僕が何に時間を食わされているのか、周りじゃ全く分かりもしない。別に変なパッチを作ること自体は問題じゃないんだけど、パブリックなMLを避ける正当な理由が僕には分からない。一部の人はちゃんと言えば分かってくれるんだけど。


コメント

ladybug — 03/18/2005 13:08:41

VCS(CVSとかSubversionとか)に乗せて、各バージョンをブランチとして管理するようにして、前提条件にある「同じソースが複数のバージョンでまでで共有されているとして」という部分をなくしちゃうというのは、解決策としてダメなんですかね。
すべてのバージョンで共有されている実装部分を更新した場合、各バージョンでちゃんと動くかどうかなんて、どうせ確認しないといけないんだから、その確認作業が行われていることを、各ブランチへのマージという形で明示できるという利点もついてきますよ(苦笑

atsushieno — 03/18/2005 14:47:27

ええ、_可能なときは_それが良いと思います。でもブランチとビルドプロファイルが別々の概念になっているとそうもいかなくて(^^;

atsushieno — 03/18/2005 15:03:35

そうかそうするとタイトルにあるversioningっていう表現はあんまし適切でないのかも…


この記事を共有:

前の記事
ソースコードのversioningとwarningの上手なつきあい方
次の記事
Commons.Xml.Relaxng.dll for MS.NET