WCF 서비스의 ASP.NET 호스트에서 작업하고 있습니다. 이 서비스는 자체적으로 비 관리 DLL을 참조하는 C++/CLI 래퍼 라이브러리를 참조합니다. this question을 기반으로 ASP.NET DLL에 관리되지 않는 DLL을 포함했습니다. 나는 다음과 같이 압축을 풉니 다 : 나는 App_Code
폴더에 Global.asax.cs
과 AppInitialize()
에 Application_Start()
이 코드를 넣어 시도했습니다임베디드 된 비 관리 DLL이 ASP.NET에로드되지 않습니다.
string[] dlls = new [] { "myDLL.dll", "myDLLD.dll" };
Assembly assembly = Assembly.GetExecutingAssembly();
string location = Path.GetDirectoryName(assembly.Location);
Dictionary<string, Stream> streams =
(from dll in dlls
select new KeyValuePair<string, Stream>(
dll, assembly.GetManifestResourceStream(typeof(Global), dll)))
.ToDictionary(p => p.Key, p => p.Value);
foreach (KeyValuePair<string, Stream> stream in streams)
{
using (FileStream file = new FileStream(Path.Combine(location, stream.Key),
FileMode.Create))
{
stream.Value.CopyTo(file);
}
}
하지만 두 경우 모두 내가 대해 죽음의 노란색 화면을 얼마나 래퍼 DLL 또는 종속성 중 하나를 앞에로드 할 수 없습니다. 중 하나에서 중단 점이 발생했습니다. 내가 브레이크 포인트에 도달 할 수있는 유일한 방법은 시스템 경로 (예 : C:\Windows\system
)의 어딘가에 관리되지 않는 DLL을 배치하는 것이지만, 이는 분명히 DLL을 임베딩하는 목적을 처음부터 무의미하게 만듭니다. 어떻게 ASP를 찾고 시작하기 전에 DLL이 있어야합니까?
아마도 관리되지 않는 DLL을 참조하는 관리 DLL도 포함되어야합니다. ASP.NET은 주문형 연결을하지 않습니다 :'bin'에있는 어떤 것이라도 "지금 당장"로드 및 연결을 시도합니다. – Medinoc