'어셈블리를로드 할 수 없음'이지만 어셈블리가 이미로드되었습니다.

푸딩

나는 두 개의 외부 DLL을 사용합니다 간단한 WPF 응용 프로그램을하고 있어요 Nancy.dllNancy.Hosting.Self.dllHTTP를 통해 일부 데이터를 보낼 수 있습니다. .exe 파일을 독립 실행 형으로 유지하고 싶으므로 두 개의 .dll 파일을 응용 프로그램에 병합하려고합니다. 나는 다음과 같은 방법을 병합 여러 빌드 후 시도 NetZILMerge,하지만 모두 WPF 응용 프로그램에 문제가있는 것 같습니다 및 출력 작업 실행하지 않았다.

게시물 이 문제에 대해 진행에 대한 여러 제안이 같은 두 가지로 그들은 비록 모든 종기 아래 :

  1. 빌드 후 합병을 사용하십시오. 제 경우에는 잘 작동하지 않습니다.
  2. DLL을 포함 된 리소스로 응용 프로그램에 넣고 AppDomain.CurrentDomain.AssemblyResolve필요한 경우 이벤트를 사용 하여로드합니다.

두 번째 옵션은 유망 해 보였습니다. 이벤트가 트리거되고, 포함 된 리소스를 찾고, 데이터 스트림을 만들어 어셈블리로로드합니다. 어셈블리가 여러 방법으로로드되었는지 확인할 수 있습니다.
Visual Studio Debug -> Windows -> Modules는로드 된 어셈블리를 표시하고로드되는 어셈블리
AppDomain.CurrentDomain.GetAssemblies()도 표시합니다.

그러나 어셈블리를 사용할 때 (이 경우를 호출 Nancy.Hosting.Self.NancyHost host = new NancyHost();) 여전히 다음 오류가 발생합니다.

Could not load file or assembly 'Nancy, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

여기에 제안 된대로 모든 종속성도로드 되고로드 된 모든 어셈블리가 동일한 AppDomain에 있는지 확인했습니다 . 또한 위의 오류는에만 해당 Nancy.dll되며 AssemblyResolve이벤트가 Nancy.Hosting.Self.dll올바르게 로드 됩니다.

난 정말 내가 잘못 일을 할 수있는 다른 무엇을 볼 수 없습니다, 그리고 뭔가 나 어셈블리를로드할지 여부를 특별히 이상하게 작동한다 낸시입니다으로 잘못 여부 (I 발견 GitHub의에서이 문제를 내가가 관련이 있는지 여부 불확실 해요있는) . 어셈블리로드, dll 병합 또는 Nancy의 대안에 대한 제안이 있다면 매우 기쁩니다.

추신 :
에서 다른 메서드를 호출하려고했는데 Nancy.dll놀랍게도 할 수있었습니다. AssemblyResolve방법은 실제로 작동합니다.
초기화 Nancy.Hosting.Self.NancyHost는 여전히 문제가 있으며 스택 추적은 그 이유를 알려줍니다.

   at System.AppDomain.CreateInstanceAndUnwrap(String assemblyName, String typeName)
   at Nancy.AppDomainAssemblyCatalog.CreateRemoteReferenceProber(AppDomain appDomain)
   at Nancy.AppDomainAssemblyCatalog.LoadNancyReferencingAssemblies(IEnumerable`1 loadedAssemblies)
   at Nancy.AppDomainAssemblyCatalog.GetAvailableAssemblies()
   at System.Lazy`1.CreateValue()
   at System.Lazy`1.LazyInitValue()
   at Nancy.DefaultTypeCatalog.GetTypesAssignableTo(Type type)
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at Nancy.DefaultTypeCatalog.GetTypesAssignableTo(Type type, TypeResolveStrategy strategy)
   at Nancy.Bootstrapper.NancyBootstrapperLocator.GetBootstrapperType(ITypeCatalog typeCatalog)
   at Nancy.Bootstrapper.NancyBootstrapperLocator.LocateBootstrapper()
   at Nancy.Bootstrapper.NancyBootstrapperLocator.get_Bootstrapper()

따라서 Nancy는 부트 스트 래퍼를 초기화 할 때 참조 어셈블리를 가져 오려고 시도 하고이를 위해 GetAssemblyDirectories 메서드를 사용합니다 . 당연히 DLL은 거기에 존재하지 않으며 (.exe로 병합하려고 할 때) 부트 스트 래퍼가 초기화에 실패합니다.

이 문제를 고칠 수없고 Nancy는 더 이상 유지 관리되지 않으므로 내 질문을 다시 말하고 싶습니다.
C #을위한 멋진 경량 웹 프레임 워크를 아는 사람이 있습니까?

푸딩

나는 Nancy그냥 나를 위해 잘 작동하기 때문에 다른 것을 찾아보고 싶지 않았습니다 . 대신 내가 낸 것은 nancy가 그것을 찾고, 부트 스트 래퍼를 초기화하고, 데이터를 다시 제거 할 것이라는 것을 알고있는 곳에 dll을 작성하는 것이 었습니다.

bool NancyPresent = File.Exists("Nancy.dll");
if (!NancyPresent) {
    var assembly = Assembly.GetExecutingAssembly();
    using (Stream stream = assembly.GetManifestResourceStream("Resources.Nancy.dll"))
    using (MemoryStream MS = new MemoryStream()) {
        stream.CopyTo(MS);
        File.WriteAllBytes("Nancy.dll", MS.ToArray());
    }
    Nancy.Bootstrapper.INancyBootstrapper bootstrapper = Nancy.Bootstrapper.NancyBootstrapperLocator.Bootstrapper;
    bootstrapper.Initialise();
    File.Delete("Nancy.dll");
}

테이크 아웃 메시지는 Nancy의 오류가 달리 표시 했음에도 불구하고 dll이 제대로로드되고 있다는 것입니다. 오픈 소스라 할지라도 써드 파티 패키지가 정확히 무엇을할지 알 수 없습니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

어셈블리를로드 할 수 없기 때문에 프로젝트가 빌드되지 않습니다.

PowerShell에서 WinSCP로드-파일 또는 어셈블리를로드 할 수 없음-이 어셈블리는 현재로드 된 런타임보다 최신 런타임에 의해 빌드되었습니다.

어셈블리 문제를로드 할 수 없음

Nunit-Console 어셈블리를로드 할 수 없습니다.

파일, 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다. 찾은 어셈블리의 매니페스트 정의가 어셈블리 참조와 일치하지 않습니다.

캐시에 어셈블리 추가 실패 :이 어셈블리는 현재로드 된 런타임보다 최신 런타임에 의해 빌드되었으며로드 할 수 없습니다.

"System.IO.FileNotFoundException: 파일 또는 어셈블리 X를 로드할 수 없음"으로 인해 NUnit 테스트가 실행되지 않습니다.

GAC에서 어셈블리를로드 할 수 없지만 프로그램 폴더에서로드됩니다.

UWP 라이브러리를 사용하는 WPF 앱, "파일 또는 어셈블리를로드 할 수 없음"

Techtalk.Specflow 오류 : 어셈블리 파일 또는 어셈블리를로드 할 수 없습니다.

.Net 표준 라이브러리 (System.Text.Json)에 대한 어셈블리를로드 할 수 없음

.NET Core 웹 애플리케이션을 SAP Hana에 연결 (어셈블리를로드 할 수 없음)

사용자 지정 HttpContent가 빌드되지 않음-어셈블리를 AOT 할 수 없음 (mtouch)

릴리스 모드에서 Visual Studio "파일 또는 어셈블리를로드 할 수 없습니다. 작업이 지원되지 않습니다."오류

이 어셈블리 x86 코드를 이해할 수 없습니다.

SSRS 보고서에 사용자 지정 라이브러리를 추가 할 때 파일 또는 어셈블리 오류를로드 할 수 없습니다.

바이트 배열에서로드 할 때 AppDomain 어셈블리를 찾을 수 없습니다.

파일 또는 어셈블리를로드 할 수 없습니다 ... Windows Azure 웹 사이트

WPF는 파일이나 어셈블리 또는 종속성 중 하나를로드 할 수 없습니다.

System.IO.FileNotFoundException : xamarin 양식을 업데이트 한 후 "AppName"어셈블리를로드 할 수 없습니다.

IIS 웹 사이트. 파일 또는 어셈블리를로드 할 수 없습니다.

내 dll이 시스템에 대한 어셈블리 참조를 로드할 수 없습니다.

어셈블리에서 'System.Runtime.CompilerServices.ExtensionAttribute'형식을로드 할 수 없지만 mscorlib가 아닙니다.

Azure-기본 페이지로 리디렉션되지 않고 "파일 또는 어셈블리 'DotNetOpenAuth.Core'를로드 할 수 없습니다."오류 표시

프로젝트 어셈블리를로드 할 수 없습니다.

실행할 참조 어셈블리를로드 할 수 없습니다.

Visual Studio가 종속성을 복사하지 않음 | 파일 또는 어셈블리를로드 할 수 없습니다.

로드 할 수없는 플러그인이 Mono에서 어셈블리를 누수합니다.

프로젝트를 참조로 추가하면 파일이나 어셈블리 또는 해당 종속성 중 하나를로드 할 수 없습니다.

TOP 리스트

  1. 1

    셀레늄의 모델 대화 상자에서 텍스트를 추출하는 방법은 무엇입니까?

  2. 2

    Blazor 0.9.0 및 ASP.NET Core 3 미리보기 4를 사용한 JWT 인증

  3. 3

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  4. 4

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  5. 5

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  6. 6

    오류 : MSB4803 : MSBuild의 .NET Core 버전에서 "ResolveComReference"작업이 지원되지 않습니다.

  7. 7

    R에서 Excel로 내보낼 때 CET / CEST 시간 이동이 삭제됨

  8. 8

    node.js + postgres : "$ 1"또는 그 근처에서 구문 오류

  9. 9

    확대 후 하이 차트에서 Y 축이 잘못 정렬 됨

  10. 10

    EPPlus에서 행 높이를 설정할 때 이상한 동작

  11. 11

    Ionic 2 로더가 적시에 표시되지 않음

  12. 12

    MS Access 부분 일치 2 테이블

  13. 13

    EPPlus에서 병합 된 셀의 행 높이 자동 맞춤

  14. 14

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  15. 15

    ResponseEntity를 사용하고 InputStream이 닫히는 지 확인하는 적절한 스트리밍 방법

  16. 16

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  17. 17

    오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

  18. 18

    Java에서 이미지를 2 색으로 변환

  19. 19

    overflow-y를 사용할 때 스크롤 버벅 거림 줄이기 : scroll;

  20. 20

    Java에서 Apache POI를 사용하여 테이블 크기 및 간격을 단어로 설정하는 방법

  21. 21

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

뜨겁다태그

보관