VisualStudioが認識しない新規クラス(C#)

2020年8月18日火曜日

技術

t f B! P L

 頭を抱える

直接触っていない関連プロジェクト

WebServiceを使った既存システムに機能追加の作業をしています。

サーバーとやりとりするための新しいクラスにpublicフィールドを持たせたいんですが、サーバー側プロジェクトは問題なくビルドできるものの、それを参照しているクライアント側プロジェクトのビルドが通らなくなりました。

今回追加しているクライアント側機能が通らないならまだしも、全く関係なさそうな既存機能で参照不足エラーになります。

その状態でオブジェクトブラウザで確認すると、たしかにサーバー側で定義している独自クラスが見えなくなっています。

その独自クラスの定義を探すとソリューション全体をgrepしても見つからず・・・。

ソリューションの外で定義してるとは思えないし、どういう実装になっているのか。

ビルドを通す方法

問題のフィールドをprivateにすれば通るが、当然使う側からアクセスできなくなるので意味なし。そこでpublicメソッドのsetterを作ったらビルドは通るのにメソッドが見えない。

型はDataTableで、それをstringやintに変えるとpublicでも大丈夫。

DataTableのシリアライズ絡みかと調べても既存部分では特に気にせず引数に使っている。

詰みました。

迷宮入りから回避策へ

DataTableをxml化して長いstringで渡すようにしてみますかね。

独自のデータクラス(構造体のような感じで単にstringやintのフィールドをDBのテーブルレイアウトと同じだけ用意したクラス)を作って、送信時にはXML化して、それをシリアライズして長いstringとして送信することで解決しました。

VisualStudioのバグではなかろうか?


このブログを検索

自己紹介

自分の写真
フリーランスで主にソフトウェア開発をしています。

QooQ