ASP.NET-如何停止将一个项目中的类/DLL编译到另一个项目中

ASP.NET-如何停止将一个项目中的类/DLL编译到另一个项目中,asp.net,Asp.net,我有一个恼人的问题,以前有用的东西停止了工作。 查看此代码: Assembly _abc_assembly = Assembly.LoadFile(“c:\junk\abcabstract\bin\abc.dll”); ABC.ContentAttribute attribute; attribute = (ABC.ContentAttribute)_abc_assembly.CreateInstance("ABC.TextAttribute"); ContentAttribute在dll中

我有一个恼人的问题,以前有用的东西停止了工作。 查看此代码:

Assembly _abc_assembly = Assembly.LoadFile(“c:\junk\abcabstract\bin\abc.dll”);

ABC.ContentAttribute attribute;
attribute = (ABC.ContentAttribute)_abc_assembly.CreateInstance("ABC.TextAttribute");
ContentAttribute在dll中定义。 显然,这应该是可行的。您应该能够将对象强制转换为自身

但它会产生这样的错误:

这里讨论了这个bug,这就是我为什么走到这一步的原因。从这篇文章中,我得知class ContentAttribute不知何故以ABC.DLL和网站项目的DLL结尾

我的网站项目如下所示:

// Assembly _abc_assembly = Assembly.LoadFile(“c:\junk\abcabstract\bin\abc.dll”);
// ContentAttribute attribute;
// attribute = (ContentAttribute)_abc_assembly.CreateInstance("ABC.TextAttribute");
ContentAttribute attribute = new ContentAttribute();

现在ContentAttribute不在此项目中,它位于dll ABC.dll中。您可以看到,我已经扩展了每个分支,但ContentAttribute.cs文件不在那里

然而,不知何故,它最终在dll中为网站创建了一个重复的引用。ContentAttribute以某种方式在ABC.DLL和网站项目的DLL中结束

谁能告诉我:

a) 为什么ContentAttribute在两个DLL中?我不认为在项目中包含dll会迫使代码进入项目dll

b) 如何阻止它发生

顺便说一句,如果可以避免的话,我绝对不想把这个网站项目变成一个网站应用程序

注:

删除临时ASP.NET文件无效。一旦我编译了我的网站项目,它们就会被重新创建


ABC.DLL被您的网站引用,并成为其一部分(位于Bin文件夹中)。ASP.NET编译您的网站,ABC.DLL放在临时位置(C:\Windows…\Temporary ASP.NET Filse…)。它由ASP.NET自动加载。您正试图从不同位置(D:\junk\abcabstract\bin\ABC.dl)手动加载ABC.DLL。两个程序集不匹配,因此会出现错误

为了防止这种情况发生,我想你必须重新考虑你的插件架构。你能提供更多的信息吗

更新: 你为什么不这样修理它:

// Assembly _abc_assembly = Assembly.LoadFile(“c:\junk\abcabstract\bin\abc.dll”);
// ContentAttribute attribute;
// attribute = (ContentAttribute)_abc_assembly.CreateInstance("ABC.TextAttribute");
ContentAttribute attribute = new ContentAttribute();

这是名称空间冲突。它不知道要使用哪个ContentAttribute,因为它在不同的命名空间/程序集中找到2

您可能有一个名称不同的DLL旧副本。删除您的临时ASP.Net目录并重新编译

为了避免将来:

如果需要使对象工作,请为对象使用完全限定的名称

ABC.ContentAttribute ca = new ABC.ContentAttribute();
或者如果你也这么做

ABC.ContentAttribute ca =(ABC.ContentAttribute)ca2;

我可以发誓这一天没有发生。这里还没有真正的架构,这是一个测试项目,我只需要它工作!为什么需要使用完整路径加载程序集?我添加了在没有反射的情况下创建ContentAttribute实例的代码。我需要使用反射检查类,并在执行某些操作时将某些类型转换回基类型。上面的代码不现实,但清楚地指出了问题所在。我已经添加了完全限定名并删除了所有临时文件,但仍然不起作用。请参阅我更新的问题。这可能是一个愚蠢的问题,但在顶部的代码中,当项目位于“D:\”驱动器中时,您正在从“C:\”调用load。由于您正在强制转换TextAttribute,我假设它继承自ContentAttribute,否则将不起作用。错误消息使我相信您应该查看Default.aspx.cs,而我在您的项目中没有看到它。可能是隐藏的,单击解决方案资源管理器顶部的“显示隐藏文件”。