2010-06-02 4 views
7

Je commence tout juste avec postsharp/AOP. Je veux faire de l'instrumentation pour C# pour suivre l'utilisation de certains addins que j'écris pour un logiciel.AssemblyLoadException dans postsharp, problème avec les arguments des DLL référencées?

J'essaie d'utiliser la classe OnMethodBoundaryAspect pour prendre note des valeurs de certains des paramètres lorsque la méthode est appelée. Ces paramètres sont des types référencés dans une DLL externe.

Quand j'ajouter mon attribut à la méthode, le projet ne construira pas, je reçois l'erreur suivante

Erreur 2 exception non gérée (2.0.5.1204, 64 bits, CLR 2.0, la version): PostSharp.CodeModel .AssemblyLoadException: Erreur lors du chargement de l'assembly "C: \ Program Files \ Autodesk \ Revit Structure 2011 \ Program \ RevitAPI.dll": Impossible de charger le fichier ou l'assemblage 'revitapi, Version = 0.0.0.0, Culture = neutre, PublicKeyToken = null 'ou l'une de ses dépendances. L'opération n'est pas supportée. (Exception de HRESULT: 0x80131515)

Le REvitAPI.dll est le fichier avec le type dedans. J'ai également testé simplement en ajoutant l'attribut au projet mais ne l'appliquant à aucune méthode, cela provoque également l'erreur. Il semble donc que ce n'est pas lié aux types de paramètres de la méthode elle-même, mais simplement à l'existence de cette DLL.

Est-ce que quelqu'un a déjà rencontré ce problème, ou quelqu'un peut-il me diriger dans la bonne direction pour savoir où obtenir plus d'informations à ce sujet?

Répondre

9

Ceci est un problème connu avec les dépendances C++.

La raison en est que RevitAPI.dll n'est pas un MSIL pur, il ne peut donc pas être chargé par l'hôte natif (plus rapide).

Une solution de contournement consiste à marquer cet assembly comme "ignoré". Vous pouvez le faire en éditant le csproj et en ajoutant:

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

Si cela ne fonctionne pas (parce qu'il n'y a aucun moyen pour PostSharp d'ignorer l'assemblée), vous devez forcer PostSharp à utiliser l'hôte géré (plus lent) :

<PropertyGroup> 
    <PostSharpHost>Managed</PostSharpHost> 
</PropertyGroup> 
Questions connexes