2016-08-12 6 views
2

내가 폴더에서 일부 .dll 파일을로드 할 수 트링 오전 :Asp.net 코어로드 어셈블리

var fileNames = Directory 
     .GetFiles(path, "*.dll", searchOption); 
    var assemblyNames = fileNames 
     .Select(AssemblyLoadContext.GetAssemblyName); 

    List<Assembly> assemblies = new List<Assembly>(); 
    foreach (AssemblyName assemblyName in assemblyNames) 
    { 
     assemblies.Add(Assembly.Load(assemblyName)); 
    } 

그러나 어떻게 든 어셈블리를로드 할 수 없습니다 : 이 가능하다 어떻게 FileNotFoundException, Could not load file or assembly [...] The system cannot find the file specified.

의 때문에 파일이 분명히 있습니까?

배경이 더 필요하면 추가 정보를 제공 할 수 있습니다.

+0

는'fileNames'이 채워집니다? –

+0

예, 첫 번째 항목과 단일 항목이있는 문자열 배열 : "Uploads \\ TestPlugin.dll" – jasdefer

답변

0

파일에서 어셈블리를로드하려면 Assembly.LoadFrom() 함수를 사용하는 것이 더 쉽습니다. 응용 프로그램에 보일 것 같은 :

 
var fileNames = Directory.GetFiles(path, "*.dll", searchOption);

List<Assembly> assemblies = new List<Assembly>(); foreach (string fileName in fileNames) { assemblies.Add(Assembly.LoadFrom(fileName)); }

[편집]

당신은 예를 들어, 당신이 어셈블리에 대한 참조에 있습니다 (응용 프로그램에서 나중에 사용하기 위해 어셈블리를로드하려고 시도하는 경우 Visual Studio)에서 AppDomain.AssemblyResolve 이벤트를 구현하는 것이 좋습니다. 어셈블리를 찾을 수없고로드해야 할 때 AppDomain.AssemblyResolve 이벤트가 발생합니다. 이 때 AppDomain에 다른 파일 위치에 어셈블리를 제공 할 수 있습니다. 이러한 using 문으로

+0

답장을 보내 주셔서 감사합니다. 하지만 다음과 같은 오류가 발생합니다 : '어셈블리'에 대한 정의가 포함되어 있지 않습니다 'LoadFrom'. 그 방법은 어디에서 찾을 수 있습니까? – jasdefer

+0

LoadFrom 메서드는 .NET Framework의 기본 제공 파트입니다. https://msdn.microsoft.com/en-us/library/system.reflection.assembly.loadfrom(v=vs.110).aspx –

+1

그러나 asp.net 핵심 프레임 워크 (https : // github. co.kr/dotnet/corefx/blob/master/src/System.Reflection/ref/System.Reflection.cs)? 어셈블리에 대한 참조가 없기 때문에 런타임 중에 dll을 추가해야합니다. – jasdefer

2

:

using System.Reflection; 
using System.Runtime.Loader; 

이 시도 : 디버그에서

var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(pathTodll); 
관련 문제