【问题标题】:Assembly Cannot be cast装配体不能铸造
【发布时间】:2012-02-27 16:27:42
【问题描述】:

这是我的代码,它加载一个 dll 文件并在 xml 中写入有关该文件的信息:

MyOptions ass = MyOptionsList[MyOptionsList.Count - 1];
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
StringWriter sw = new StringWriter();
XmlSerializer serializer = new XmlSerializer(ass.GetType(),
    new Type[] { typeof(MyOptions) });
serializer.Serialize(sw, ass);
//more code writing in an xml file
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    return Assembly.LoadFrom(correctPath + ".dll");
}

问题发生在serializer.Serialize(sw, ass); 行。内部异常说我不能从一个 dll 转换到另一个。两个 dll 文件具有相同的名称。一个在correctPath 上,第二个在其他路径上。如何解决?

MyOptions 是一个类库项目,我正在加载的 dll 正在从该项目中扩展。

【问题讨论】:

  • 你的代码想要达到什么目的?
  • @GregC 加载一个 dll 文件并在 xml 中写入有关该文件的信息。
  • 这部分代码没有解释你是如何将 dll 放入 ass 中的。
  • 确切的异常消息和堆栈跟踪是什么?
  • @Srcee 你还没有解释 MyOptions 实际上是什么。这显然是某种类,但我能想到的就是这些。此外,不会有异常错误消息指出您不能从一个 DLL 转换到另一个,因为 DLL 不是可以转换的东西。

标签: c# visual-studio-2005 assemblies


【解决方案1】:

我刚刚尝试了以下没有问题,我认为您的问题可能出在其他地方。

public class MyOptions
{
  public int n;
}

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
  return Assembly.LoadFrom(@"C:\windwos\test.dll");
}

static void Main(string[] args)
{
  MyOptions ass = new MyOptions();
  AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
  StringWriter sw = new StringWriter();
  XmlSerializer serializer = new XmlSerializer(ass.GetType(), new Type[] { typeof(MyOptions) });
  serializer.Serialize(sw, ass);
  //more code writing in an xml file
  AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
}

请注意,未调用事件代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多