2010-06-02 21 views
7

Estoy empezando con postsharp/AOP. Quiero hacer algunos instrumentos para C# para rastrear el uso de algunos complementos que escribo por un pedacito de software.AssemblyLoadException en postsharp, ¿problema con los argumentos de los archivos DLL a los que se hace referencia?

Estoy tratando de utilizar la clase OnMethodBoundaryAspect para tomar nota de los valores de algunos de los parámetros cuando se llama al método. Esos parámetros son tipos a los que se hace referencia en una DLL externa.

Cuando agrego mi atributo para el método, el proyecto no va a construir, me sale el siguiente error

error 2 Excepción no controlada (2.0.5.1204, 64 bits, CLR 2.0, Release): PostSharp.CodeModel .AssemblyLoadException: Error al cargar el ensamblado "C: \ Archivos de programa \ Autodesk \ Revit Structure 2011 \ Program \ RevitAPI.dll": no se pudo cargar el archivo o ensamblado 'revitapi, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null 'o una de sus dependencias. La operación no es compatible. (Excepción de HRESULT: 0x80131515)

REvitAPI.dll es el archivo con el tipo. También probé simplemente agregar el atributo al proyecto pero no aplicarlo a ningún método, esto también causa el error. Por lo tanto, parece que no está relacionado con los tipos de parámetros del método en sí, sino simplemente con la existencia de esta DLL.

¿Alguien se ha encontrado con este problema antes, o puede alguien señalarme en la dirección correcta de dónde obtener más información sobre esto?

Respuesta

9

Este es un problema conocido con las dependencias de C++.

La razón es que RevitAPI.dll no es MSIL puro, por lo que no puede ser cargado por el host nativo (más rápido).

Una solución consiste en marcar este conjunto como "ignorado". Puede hacerlo mediante la edición del csproj y añadiendo:

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

Si esto no funciona (porque no hay forma de que PostSharp hacer caso omiso de la asamblea), usted tiene que forzar PostSharp utilizar el host administrado (más lento) :

<PropertyGroup> 
    <PostSharpHost>Managed</PostSharpHost> 
</PropertyGroup> 
Cuestiones relacionadas