外部のDLLに間接的に依存しているとまずい事があるらしい。
具体的に、Genericsを使って設定された引数の型ごとに処理をわけるようにしたんだけど。
実行時に、未知の型が来たらしくExceptionが発生。。。
下記のように、型に応じて保存形式を変えるような作りです。
Tの内容は実行時に決まります。
設定ファイルへのアクセス(A.DLL)
// 設定
public static void SetValue(string aName, T aValue)
{
TypeConverter tConverter = TypeDescriptor.GetConverter(typeof(T));
SetValue(aName, tConverter.ConvertToString(aValue));
}
// 取得
public static T GetValue(string aName)
{
TypeConverter tConverter = TypeDescriptor.GetConverter(typeof(T));
return (T)tConverter.ConvertFromString(GetValue(aName));
}
こちらは格納されるクラスです。ファイルにどのように格納するかをTypeConverterを使って指定しています。
新しいクラスへTypeConverterを指定(B.DLL)
[TypeConverter(typeof(XxxTypeConverter))]
public class Xxx
{
}
public class XxxTypeConverter : TypeConverter
{
}
この場合、A→Bへの依存関係がないので駄目らしい。
とりあえず、TypeDescriptorに追加して暫定対処としました。
これ、PropertyGridで出ていた問題と同じですね。。某氏(Blogに名前書いていいか不明なので伏字)が対処法ちらっと言ってたから、今度チェックしておきます。
2007/05/27 22:08追記:TypeConverterへの追加方法
TypeConverterManager.RegisterConverter(typeof(Xxx), new XxxTypeConverter());
で追加できます。
2005/05/28 18:22 追記:例外の内容
表示名 'Xxx(DLL名)' を伴うアセンブリを、ID 1 を伴う AppDomain の 'Load' バインド コンテキストで読み込めませんでした。 失敗の原因は次のとおりです: System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'、 またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 ファイル名 Xxx(DLL名), Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' です。
3件のコメント
squld · 2007-05-28 18:27
問題の背景説明が少ないので、分かりづらい。
メモ用途であればコレで十分だと思う。
koreyasu · 2007-05-29 00:54
半分メモだからなぁ…、Weblogの名のとおりになってるけどOrz
ただ、説明が不十分すぎるのは確かだから、そこは直しておく。
匿名 · 2015-05-24 17:27
>某氏(Blogに名前書いていいか不明なので伏字)が対処法ちらっと言ってたから、今度チェックしておきます。
そもそも誰だよ
そいつよこせ