【问题标题】:Unable to generate a temporary class无法生成临时类
【发布时间】:2010-09-23 21:09:12
【问题描述】:

我最近将我的机器升级到 XP 64 位并且还对我们的软件进行了一些代码更改,当我在做 new XmlSerializer(valueType) 时,其中 valueType 是使用 DirectoryItem 的类型,我得到了以下错误:

无法生成临时类(结果=1)。 错误 CS0012:类型“XYZ.Blob.DirectoryItem”在未引用的程序集中定义。您必须添加对程序集 'XYZ.Services.Blob, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 的引用。

我真的不明白为什么它会显示这个错误。该 dll 位于 src 文件夹中,并且完全相同的应用程序在同一台机器上运行没有问题(以前的版本)。

如果您有任何想法,我怎样才能找到它给出这个错误的原因。

【问题讨论】:

  • 为什么在名为“src”的文件夹中有一个 DLL?这通常是存储源代码文件而不是 DLL 的文件夹的名称。您的项目设置听起来很不寻常,很难为您提供帮助。
  • 它与src无关,我是偶然添加的;结构就像标准的.net strcutre

标签: c# reference temporary-directory


【解决方案1】:

你能确认你不是falling in this unfortunate scenario吗?如果是这种情况,那是 Microsoft 无法修复的错误:

您需要在程序集 A 中输入一些类型:

public interface IInterface {}

以及要在另一个程序集中序列化的类型:

public class MyClass
{
    public int Number;
    public void Method<T>() where T : IInterface { }
}

现在,尝试初始化一个 XmlSerializer

XmlSerializer ser = new XmlSerializer(typeof(MyClass));

【讨论】:

  • 由于某种原因我无法打开您发送的链接,您可以粘贴内容吗?
  • 很高兴你提到了这个五年前的错误。刚刚尝试了接口解决方法,现在没有问题。
  • 我遇到了同样的错误...但是建议的虚拟接口并不能解决我的问题。实际上,只有当我的 dll 嵌入到 exe 中并由 AssemblyResolve 事件加载时,我才会收到此错误。如果 dll 没有嵌入,它工作正常。只有 XmlSerializer 对嵌入式 dll 有这个问题,其他一切似乎都很好。顺便说一句,我正在使用 VS 2010 express,.NET 4.0,构建任何平台。
【解决方案2】:

您的程序集是为 x86 平台构建的。

查看项目的属性 -> 构建 -> 目标平台 默认为 x86。你需要为 x64 重新编译。

最好的选择是为“任何”编译 - 在你的情况下。

【讨论】:

  • 你是对的,我的程序集是为 x86 平台构建的,但这是设计使然。我在 64 位机器上运行,但我们的应用程序暂时需要为 x86 构建。跨度>
  • 我也不明白为什么它告诉你它找不到参考,而参考在那里并且 dll 在输出目录中
  • 它找不到引用,因为它是为 x86 构建的,所以它不会加载它 - 就它而言,它不存在,因为 x64 不存在。使用“任何 CPU”选项构建它。
  • 将一切构建为 x86。它将在 x64 中作为 WOW 运行。
【解决方案3】:

似乎一旦我将所有隐式转换更改为显式转换,解决方案就已修复。

感谢您的帮助。

【讨论】:

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