[英]Is it possible to use Type.GetType with a dynamically loaded assembly?
[英]C# : Type.GetType is null on classes of dynamically loaded assemblies
這是我關於堆棧溢出的第一個問題。 我試圖尋找一種解決方案,但在任何地方都找不到一個或類似的解決方案。
我有一個 MVC 網站項目,它具有不同的 DLL(插件),並且由於不需要在所有環境中部署這些 DLL,因此我在 Global.asax 中的 Application_Start 上從文件夾動態加載這些 DLL,並僅部署每個環境所需的內容. 所以我不知道在項目中引用它們的內容,所以我可以為所有人構建一個。
我的問題是 Type.GetType("FullClassName, AssemblyName") 總是在這些插件中的對象上返回 null。
在 Application_Start 上,我基本上加載一個程序集,將它注冊到 GAC,將它加載到當前的 AppDomain,初始化它的元數據並運行它的引導程序,並通過反射在全局 Unity 容器中注冊組件。
foreach (string file in fileList) {
string fileName = (Path.GetFileName(file));
Assembly asm = Assembly.LoadFrom(file);
foreach (Type assemblyType in asm.GetTypes()) {
new System.EnterpriseServices.Internal.Publish().GacInstall(file);
AppDomain.CurrentDomain.Load(asm.GetName());
MetaDataHelper.InitialiseMetadataForAssembly(asm);
IBootstrapper bootsrapper = (IBootstrapper)Activator.CreateInstance(assemblyType, container);
bootsrapper.Initialise();
}
}
我還通過強命名我的程序集並將它們添加到 web.config 中嘗試了這種方法,但無濟於事。
<dependentAssembly>
<assemblyIdentity name="MyAssembly" culture="neutral" publicKeyToken="123456789"/>
<codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
</dependentAssembly>
任何人都可以幫助我請問我錯過了什么嗎?
提前致謝。
我想到了。 我無法相信解決方案是多么簡單。 在 AppDomain.CurrentDomain 和一些 MSDN 文檔中進行了一些探索之后,我只需要實現並將自定義程序集解析事件處理程序添加到當前域。
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve);
static Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
--args.Name is the assembly name passed to the GetType("FullClassName,AssemblyName");
--Search in LoadedAssemblies by name and return it.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.