Добавить Post Sharp Aspect без изменения существующего кода - PullRequest
1 голос
/ 11 января 2020

Я использую PostSharp 6.4.5. Мне нужно добавить трассировку уровня метода для существующих проектов. Я хочу войти, когда метод вводится и выходит вместе с типами параметров и значениями. Я могу только перестроить проект / решение и не могу вносить какие-либо изменения в код. Я нашел способ добиться этого с помощью добавления аспектов, используя XML.

https://doc.postsharp.net/xml-multicasting

https://doc.postsharp.net/configuration-system

https://doc.postsharp.net/logging-customizing

Используя этот метод и выполнив несколько других настроек для PostSharp, я создал файл postsharp.config, который выглядит следующим образом.

<Project xmlns="http://schemas.postsharp.org/1.0/configuration">
  <Logging xmlns="clr-namespace:PostSharp.Patterns.Diagnostics;assembly:PostSharp.Patterns.Diagnostics">
    <Profiles>
      <LoggingProfile Name="detailed" IncludeSourceLineInfo="True" IncludeExecutionTime="True" IncludeAwaitedTask="True">
        <DefaultOptions>
          <LoggingOptions IncludeParameterType="True" IncludeThisValue="True" Level="Trace"/>
        </DefaultOptions>
      </LoggingProfile>
    </Profiles>
  </Logging>
</Project>

Я также создал файл psproj в том же каталоге, где существует csproj. Ниже приведено содержимое файла psproj.

<Project xmlns="http://schemas.postsharp.org/1.0/configuration">
  <Property Name="LoggingBackend" Value="console" />
  <Using File=" absolute path to viewer dll \PostSharp.Patterns.Diagnostics.Weaver.dll"/>
  <Multicast>
    <LogAttribute xmlns="clr-namespace:PostSharp.Patterns.Diagnostics;assembly:PostSharp.Patterns.Diagnostics" ProfileName="Default" AttributeTargetTypes="Mynamepace.*" />
  </Multicast>
</Project>

Затем я перестраиваю проект и запускаю приложение, но не вижу никакой информации о трассировке. Пожалуйста, дайте мне знать, если я что-то упустил.

1 Ответ

1 голос
/ 28 апреля 2020

Шаг 1: Мы создали библиотеку, которая будет регистрировать вход и выход метода с использованием Postsharp. Например: Имя -> Сборка1. Пространство имен -> PostSharp.Samples.CustomLogging

Шаг 2. Мы добавили эту библиотечную ссылку ко всем проектам, где требуется трассировка. Мы также добавили пост-острые зависимости. Все эти изменения были внесены в файлы csproj программно. Мы также добавили ссылку на PostShrap.targets в файлах csproj, как показано ниже.

<Import Project="path to PostSharp.targets" />

Шаг 3: Создайте файл * .psproj в том же каталоге, что и файл csproj, с тем же именем, что и файл csproj. Содержание файла показано ниже. На имя сборки и пространство имен ссылаются с шага 1. В AttributeTargetTypes можно указать регулярное выражение. Все методы, которые соответствуют регулярному выражению, будут иметь вход при входе и выходе из системы

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.postsharp.org/1.0/configuration">
  <Multicast xmlns:my="clr-namespace:PostSharp.Samples.CustomLogging;assembly:Assembly1">
    <my:LogMethodAttribute  AttributeTargetTypes="*" />
  </Multicast>
</Project>

Шаг 4. Перестройте проект.

Для получения лицензии необходимо создать файл postsharp.config, содержащий лицензионный ключ. Этот файл должен находиться в том же каталоге, что и файлы csproj и psproj.

Теперь все методы будут иметь трассировку без каких-либо изменений в исходных файлах. Все сделанные изменения будут в файлах csproj.

Надеюсь, это поможет.

...