C# 将Type.GetType()与Cassini/Visual Studio Dev.Server的未引用程序集一起使用

C# 将Type.GetType()与Cassini/Visual Studio Dev.Server的未引用程序集一起使用,c#,debugging,clr,cassini,C#,Debugging,Clr,Cassini,我有一些密码 var type = Type.GetType("namespace, assembly"); return Activator.CreateInstance(type); 这在大多数情况下都可以正常工作,但是,当在使用Cassini/Visual Studio Development Server调试的网站的Global.asax中引用此代码时,找不到该类型 该类型位于未引用的程序集中,但通常与执行程序集中位于同一输出目录中。但是,仔细检查后发现,在调试过程中,Cassini将

我有一些密码

var type = Type.GetType("namespace, assembly");
return Activator.CreateInstance(type);
这在大多数情况下都可以正常工作,但是,当在使用Cassini/Visual Studio Development Server调试的网站的Global.asax中引用此代码时,找不到该类型

该类型位于未引用的程序集中,但通常与执行程序集中位于同一输出目录中。但是,仔细检查后发现,在调试过程中,Cassini将正在执行的程序集和每个引用的程序集放在其自己的目录中,位于以下位置C:\users…\AppData\Local\Temp\Temporary ASP.NET Files\root。。。。。然而,“未引用”程序集显然不存在

有没有办法让VS将额外资源复制到临时目录中,或者从指定目录运行?使用IIS是唯一的解决方案吗


提前谢谢

我认为这不是卡西尼的做法,这是ASP.NET使用.NET卷影复制来防止锁定DLL。因此,使用IIS不应该改变任何事情。缺乏明确的引用似乎让.NET将DLL放在了不同的目录中


你能把这个被引用的DLL放到GAC中吗?

这是对你对第一个答案的评论的回应(“有人有其他可能的解决方案吗?”)


是的,有一个非常简单的解决方案,它来自导致“问题”的同一来源(扰流板…是System.AppDomain)。AppDomain类中有一个名为“AssemblyResolve”的事件,您可以响应该事件(使用AppDomain.CurrentDomain获取“您的”AppDomain实例)。事件将为您提供找不到的程序集的名称(字符串)。我假设您知道所讨论的程序集的位置,所以只需使用System.Reflection.Assembly.Load(pathToYourAssembly)加载程序集,然后返回“Load”方法返回的程序集实例。“AssemblyResolve”事件处理程序有点不同。它有一个返回类型,因此在事件处理程序中,您将执行“returnThisAssembly;”,其中“thisAssembly”是Load方法的返回值。AppDomain还有一个TypeResolve事件(和其他事件),以防在程序集中找不到“应该在其中”的类型。如果将类型从一个程序集移动到另一个程序集,而没有重新编译引用该类型的所有其他内容,则可能会发生这种情况。不管怎样,希望这能帮助别人。我知道这是个老问题。

是的,这很有道理。完全忘记了。我真的不想使用GAC,因为这个未引用的程序集引用了大量的程序集。我想另一种选择是禁用卷影副本()?有人有其他可能的解决办法吗?