簡體   English   中英

C#:Type.GetType 在動態加載的程序集類上為 null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM