2017-02-25 4 views
0

リフレクションで呼び出されたクラスで逆シリアル化されたときに、アセンブリを見つけることができないというメッセージがSerializationExceptionを受け取りました。テストソリューションには、コンソールアプリケーションとクラスライブラリがあります。LoadFromされた.NETクラスライブラリのSerializationException

ここでは、全体のアプリの:

using System; 
using System.Reflection; 

namespace ConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Dynamically link ClassLibrary.dll, construct a Class1, and call it's Test(). 
      Assembly classLibraryAssembly = Assembly.LoadFrom(
       "..\\..\\..\\ClassLibrary\\bin\\Debug\\ClassLibrary.dll"); 
      Type classLibraryClassType = classLibraryAssembly.GetType(
       "ClassLibrary.Class1"); 
      ConstructorInfo constructorInfo = classLibraryClassType.GetConstructor(
       Type.EmptyTypes); 
      object classLibrary = constructorInfo.Invoke(null); 
      object[] parameters = new object[ 0 ]; 
      MethodInfo methodInfo = classLibraryClassType.GetMethod(
       "Test", BindingFlags.Public | BindingFlags.Instance); 
      methodInfo.Invoke(classLibrary, parameters); 
     } 
    } 
} 

はここで全体のクラスライブラリです:

using System; 
using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace ClassLibrary 
{ 
    public class Class1 
    { 
     public void Test() 
     { 
      // Serialize an object, then deserialize it. 
      byte[] serializedObject; 
      Class2 class2 = new Class2(); 
      class2.SomeString = "Hello"; 
      BinaryFormatter binaryFormatter = new BinaryFormatter(); 
      using (MemoryStream memoryStream = new MemoryStream()) 
      { 
       binaryFormatter.Serialize(memoryStream, class2); 
       serializedObject = memoryStream.ToArray(); 
      } 
      using (MemoryStream memoryStream = new MemoryStream()) 
      { 
       memoryStream.Write(serializedObject, 0, serializedObject.Length); 
       memoryStream.Seek(0, SeekOrigin.Begin); 
       class2 = (Class2) binaryFormatter.Deserialize(memoryStream); 
      } 
      string theString = class2.SomeString; 
     } 
    } 

    [Serializable] 
    public class Class2 
    { 
     public string SomeString; 
    } 
} 

ライン:

class2 = (Class2) binaryFormatter.Deserialize(memoryStream); 

はメッセージで、SerializationExceptionを引き起こしているが、

Unable to find assembly 'ClassLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. 

特に、このアセンブリで実行されているため、これは奇妙です。私はこれがLoadとLoadFromのコンテキストの問題だと思っていますが、実際にはそれらを理解していないか、この問題を解決する方法はありません。

ご協力いただきありがとうございます。

+0

Fuslogvw.exeを使用して、アセンブリ解決の問題のトラブルシューティングを行い、トレースを表示します。 –

+0

そのdllをメインのEXEライブラリの下にコピーします。 –

答えて

-1

DLLを作業ディレクトリにコピーすることを提案してくれたOfirに感謝します。以下の変更がロードできるように、働いていた()LoadFrom()の代わりに使用される:

File.Copy(
    "..\\..\\..\\ClassLibrary\\bin\\Debug\\ClassLibrary.dll", 
    "ClassLibrary.dll", 
    true); 
Assembly classLibraryAssembly = Assembly.Load("ClassLibrary"); 

ありがとうございました!

関連する問題