C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: シリアライズのエラー


(過去ログ 15 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■5227 / inTopicNo.1)  シリアライズのエラー
  
□投稿者/ 倉田 有大 (40回)-(2007/07/07(Sat) 14:21:00)

分類:[C# (Windows)] 

また、スパムといわれたT^T

a1:http://schemas.microsoft.com/clr/nsassem/BrightnessPluginFilter/BrightnessPluginFilter%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Dnull BrightnessPluginFilter に関連付けられているアセンブリはありません。

こういうエラーがでます。

Assembly a = Assembly.LoadFrom("graphicfilter\\BrightnessPluginFilter.dll");
Type t = a.GetType("BrightnessPluginFilter.BrightnessPluginFilter");
PluginGraphicFilter.AbstractPluginGrapchiFilter o = Activator.CreateInstance(t) as PluginGraphicFilter.AbstractPluginGrapchiFilter;
SoapFormatter formatter = new SoapFormatter();
string path = "c:\\abc.xml";
System.IO.File.Delete(path);
Stream stream = new FileStream(path, FileMode.OpenOrCreate);
//シリアライズ
formatter.Serialize(stream, o);
stream.Close();
//デシリアライズ
stream = new FileStream(path, FileMode.Open);
PluginGraphicFilter.AbstractPluginGrapchiFilter oo = (PluginGraphicFilter.AbstractPluginGrapchiFilter)formatter.Deserialize(stream);

上記の行で出てしまいます。

行おうとしていることは、派生クラスを、基底クラスにまとめて、シリアライズやデシリアライズを行おうとおもっております。
派生クラスの定義してあるBrightnessPluginFilter.dllと基底クラスが定義してあるPluginGraphicFilter.dllを
実行ファイルと同じ場所におけば、エラーは出ません。
違うフォルダに入れてやると上記のエラーが出ます。
もう、3時間ぐらいはまっています、誰かお助けをT^T
引用返信 編集キー/
■5230 / inTopicNo.2)  Re[1]: シリアライズのエラー
□投稿者/ なちゃ (46回)-(2007/07/07(Sat) 14:46:30)
それが普通です。

実行ファイルのあるフォルダのサブフォルダにあるのなら、
アセンブリの検索フォルダとして追加してしまうのがてっとり早いかもしれません。
その場合はLoadFromを使う必要もありません。Loadで十分です。

これをしたくないなら、AssemblyResolveだったかのイベントで自分でハンドリングしてやればいけると思います。

とりあえず、アセンブリのロードのしくみについてある程度調べてみた方がいいでしょう。

引用返信 編集キー/
■5231 / inTopicNo.3)  Re[2]: シリアライズのエラー
□投稿者/ 倉田 有大 (41回)-(2007/07/07(Sat) 15:11:32)
No5230 (なちゃ さん) に返信
> それが普通です。
>
> 実行ファイルのあるフォルダのサブフォルダにあるのなら、
> アセンブリの検索フォルダとして追加してしまうのがてっとり早いかもしれません。
> その場合はLoadFromを使う必要もありません。Loadで十分です。
>
> これをしたくないなら、AssemblyResolveだったかのイベントで自分でハンドリングしてやればいけると思います。
>
> とりあえず、アセンブリのロードのしくみについてある程度調べてみた方がいいでしょう。

どうもありがとうございます。
アセンブリの検索は、実行フォルダしかみてくれないのですね。デシリアライズしたファイルにパスが書かれていると勘違い
していました。^^;
アセンブリの検索フォルダを追加する方法を探してみます。ありがとうございました。
引用返信 編集キー/
■5232 / inTopicNo.4)  Re[3]: シリアライズのエラー
□投稿者/ 倉田 有大 (42回)-(2007/07/07(Sat) 15:23:01)
アセンブリの検索フォルダを追加しようとして

[DllImport("Kernel32.dll")]
static extern bool SetEnvironmentVariable(string name, string val);

bool result = SetEnvironmentVariable("DEVPATH", "GraphicFilter");

環境変数をついかしてやったのですが、同じエラーがでます。
あれ、追加の方法まちがっているのかな?
引用返信 編集キー/
■5233 / inTopicNo.5)  Re[4]: シリアライズのエラー
□投稿者/ 倉田 有大 (43回)-(2007/07/07(Sat) 15:46:18)
また、スパムT^T
先頭に英語がならぶとスパム扱いされますね。
それはともかく

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
Assembly newAssembly = null;
string path2 = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\graphicfilter";
path2 += "\\" + args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
Assembly a = Assembly.LoadFrom(path2 );
return a;



}

この方法だとうごきました。
ただ、この方法だとdllの名前とクラスの名前同じにしないといけませんね。
アセンブリの検索フォルダを追加できる方法がわかればそっちのほうがいいかな?
引用返信 編集キー/
■5236 / inTopicNo.6)  Re[5]: シリアライズのエラー
□投稿者/ 倉田 有大 (44回)-(2007/07/07(Sat) 18:23:38)
アプリケーション構成ファイルに

<configuration>
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
</configuration>

上記のコードを追加する必要があるのですね。
アプリケーション構成ファイルは初めてつかうのですが、実行すると

Object synchronization method was called from an unsynchronized block of code.

こんなエラーが出てしまいました。
アプリケーション構成ファイルは実行ファイルと同じにしたいといけないのかな?
引用返信 編集キー/
■5237 / inTopicNo.7)  Re[6]: シリアライズのエラー
□投稿者/ 倉田 有大 (45回)-(2007/07/07(Sat) 18:40:35)
うごいたああああああああああ!!!!

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="graphicfilter"/>
</assemblyBinding>
</runtime>

</configuration>

privatePathの設定でうごきましたT^T
初めて構成ファイルつかいました。

なちゃさん、本当にありがとうございました。
あああー今日も、ぐぐったぐぐった(爆)

解決済み
引用返信 編集キー/
■5238 / inTopicNo.8)  Re[7]: シリアライズのエラー
□投稿者/ 倉田 有大 (46回)-(2007/07/07(Sat) 18:58:43)
あー、うれしー感動T^T

なんども、書き込みたくなっちゃうT^T
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -