tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルシリアライズしたデータの共有
記事No8732
投稿日: 2009/02/17(Tue) 18:56
投稿者k-taka
こんにちは、VB6ユーザーでしたが、最近VB2005へ移行中です。

VB2005を使って2つのアプリケーション(A、B)を作成しています。
OSはWindowsVistaです。
そこで、Aのアプリケーションでシリアライズしたファイルを
Bのアプリケーションで読み込みたいと思っています。

データ量が多いのでBinaryFormatterを使用して、シリアライズ
しております。

Aのアプリケーションでシリアライズ・デシリアライズは出来ます。
同様にBのアプリケーションでもシリアライズ・デシリアライズは出来ます。

AのアプリケーションでシリアライズしたファイルをBのアプリケーションで
読もうとしたとき、以下のようなエラーが出ます。

解析エラーです。XMLキー
a1:http://schemas.microsoft.com/clr/nsassem/Test/Test%2C%20Version%3D1.0.0.0%2C%20Culture%3Dnenutral%2C%20PublicKeyToken%3Dnull ClsResultに関連付けられているアセンブリはありません。

シリアライズをSoapFormatterにしても同じでした。

AとBのアプリケーションとも同じClsResultを持っています。

AのアプリケーションをBの代わりに別のPCで起動(A2)して
Aがシリアライズしたデータは、A2で読み込むことが出来ました。

シリアライズしたファイルに作成元のアプリケーション名やバージョンなどの
情報があるために、別のプロジェクトでは開くことが出来ないのだと思いますが。

Aのアプリケーションでシリアライズしたデータを別のアプリケーションBで
読み込むにはどのようにしたら良いのでしょうか?

いろいろ調べてみたのですが、同じようなものが無かったと思いますので
質問させてください。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: シリアライズしたデータの共有
記事No8733
投稿日: 2009/02/17(Tue) 19:30
投稿者YuO
> シリアライズしたファイルに作成元のアプリケーション名やバージョンなどの
> 情報があるために、別のプロジェクトでは開くことが出来ないのだと思いますが。
> Aのアプリケーションでシリアライズしたデータを別のアプリケーションBで
> 読み込むにはどのようにしたら良いのでしょうか?

シリアライズするデータ部分を別のアセンブリ (つまりはDLL) に切り出して,
そのアセンブリをAとBで共用してください。

(シリアライズ対象のオブジェクト).GetType().AssemblyQualifiedNameが一致しないと,
デシリアライズに失敗すると思っておくのがよいです。

[ツリー表示へ]
タイトルRe^2: シリアライズしたデータの共有
記事No8735
投稿日: 2009/02/18(Wed) 09:44
投稿者k-taka
YuOさん回答の方ありがとうございます。
回答の方遅くなり申し訳ありません。

> シリアライズするデータ部分を別のアセンブリ (つまりはDLL) に切り出して,
> そのアセンブリをAとBで共用してください。
>
なるほど、共通の別アセンブリにすれば出来そうですね。
シリアライズするときにアセンブリネームを変更して共有できないかと
もがいておりました。

シリアライズしたいクラスのクラスライブラリを作ってあげれば良いということ
でしょうか?
クラスライブラリを作って試してみます。

> (シリアライズ対象のオブジェクト).GetType().AssemblyQualifiedNameが一致しないと,
> デシリアライズに失敗すると思っておくのがよいです。
了解しました。ありがとうございます。

[ツリー表示へ]