Я только начинаю с пострезким / AOP. Я хочу сделать некоторый инструментарий для C# для отслеживания использования некоторых дополнений, которые я пишу для части программного обеспечения.
Я пытаюсь использовать класс 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, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' или одну из его зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)
REvitAPI.dll является файлом с типом в нем. Я также протестировал просто добавление атрибута к проекту, но не применение его к любым методам, это также вызывает ошибку. Таким образом, это появляется не связанный с параметром метода, вводит себя, но просто существование этого DLL.
Кто-либо столкнулся с этой проблемой прежде, или кто-либо может указать на меня в правильном направлении того, где получить еще некоторую информацию об этом?
Это известная проблема с зависимостями C ++.
Причина в том, что RevitAPI.dll не является чистым MSIL, поэтому он не может быть загружен собственным (более быстрым) хостом.
Временное решение - пометить эту сборку как «игнорируемую». Вы можете сделать это, отредактировав csproj и добавив:
<PropertyGroup>
<PostSharpProperties>IgnoredAssemblies=RevitAPI</PostSharpProperties>
</PropertyGroup>
Если это не сработает (поскольку PostSharp не может игнорировать сборку), вы должны заставить PostSharp использовать управляемый (более медленный) хост:
<PropertyGroup>
<PostSharpHost>Managed</PostSharpHost>
</PropertyGroup>