2010-06-02 1 views
7

저는 postsharp/AOP로 시작하고 있습니다. C#에서 소프트웨어 추가로 작성한 일부 추가 기능의 사용법을 추적 할 수있는 도구를 만들고 싶습니다.Postsharp에서 AssemblyLoadException, 참조 된 DLL의 인수에 문제가 있습니까?

OnMethodBoundaryAspect 클래스를 사용하여 메서드가 호출 될 때 매개 변수의 값을 기록하려고합니다. 이러한 매개 변수는 외부 DLL에서 참조되는 형식입니다. 내가 방법을 내 속성을 추가 할 때

, 프로젝트가 구축되지 않습니다, 나는 다음과 같은 오류를

오류 2 처리되지 않은 예외 (2.0.5.1204, 64 비트, CLR 2.0 릴리스)를 얻을 : PostSharp.CodeModel를 .AssemblyLoadException : "C : \ Program Files \ Autodesk \ Revit Structure 2011 \ Program \ RevitAPI.dll"어셈블리를로드하는 동안 오류가 발생했습니다. 파일 또는 어셈블리 'revitapi, 버전 = 0.0.0.0, Culture = neutral, PublicKeyToken = null을로드 할 수 없습니다. '또는 그 의존성 중 하나. 작업이 지원되지 않습니다. (HRESULT 예외 : 0x80131515)

REvitAPI.dll은 해당 형식의 파일입니다. 또한 속성을 프로젝트에 추가하는 것으로 테스트했지만 어떤 방법에도 적용하지 않으면 오류가 발생합니다. 따라서 메소드 매개 변수 유형 자체와 관련이 없지만이 DLL 만 존재합니다.

이전에이 문제를 겪어 본 사람이 있습니까? 아니면 누군가가 올바른 방향으로 나를 가리켜 주면 더 자세한 정보를 얻을 수 있습니까?

답변

9

이 문제는 C++ 종속성의 알려진 문제입니다.

이유는 RevitAPI.dll이 순수한 MSIL이 아니므로 네이티브 (더 빠른) 호스트에서로드 할 수 없기 때문입니다.

해결 방법은이 어셈블리를 "무시 됨"으로 표시하는 것입니다. 당신은 csproj을 편집하고 추가하여 해당 작업을 수행 할 수 있습니다 (PostSharp 어셈블리를 무시하는 방법이 없기 때문에)

<PropertyGroup> 
    <PostSharpProperties>IgnoredAssemblies=RevitAPI</PostSharpProperties> 
</PropertyGroup> 

이 작동하지 않는 경우, 관리 (느린) 호스트를 사용하도록 PostSharp을 강제로 :

<PropertyGroup> 
    <PostSharpHost>Managed</PostSharpHost> 
</PropertyGroup>