웹 사이트 프로젝트에 postsharp 측면을 어떻게 적용 할 수 있습니까?

Nov 27 2020

간단한 postsharp.config파일을 사용 합니다.

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.postsharp.org/1.0/configuration">
  <Multicast xmlns:my="clr-namespace:ExceptionAutoSerializer.Aspects;assembly:ExceptionAutoSerializer">
    <my:MethodBoundaryAspect  AttributeTargetTypes="MyTopLevelNamespace.*" />
    <my:MethodBoundaryAspect  AttributeTargetMembers="*ctor*" AttributeExclude="true"/>
    <my:MethodBoundaryAspect  AttributeTargetMembers="get_*" AttributeExclude="true"/>
    <my:MethodBoundaryAspect  AttributeTargetMembers="set_*" AttributeExclude="true"/>
  </Multicast>
</Project>

내 솔루션의 모든 프로젝트는 네임 스페이스 아래에 있습니다 MyTopLevelNamespace. 그리고 솔루션의 모든 단일 프로젝트에는 내 웹 사이트 프로젝트를 제외하고 올바르게 적용된 측면이 있습니다. 방금 개발 팀에서 얻은 솔루션에 익숙하지 않습니다.

내가 아는 것은이 프로젝트의 클래스에 aspect를 적용하고 싶다는 것 뿐이며 postsharp는 특정 프로젝트를 무시하는 것 같습니다. 구성 파일은 src/폴더에 있으며 모든 프로젝트에 적용 되어야 합니다.

내 측면을 적용 할 유형이 구성 파일에 지정된 네임 스페이스 아래에 있고 제외 패턴과 일치하지 않는지 확인했습니다.

충분한 정보를 제공 했습니까? 프로젝트가 웹 사이트 프로젝트이기 때문인지는 모르겠지만 다른 것은 볼 수 없습니다.

편집 : 프로젝트에 너겟 패키지를 추가했는지 확인했습니다. 또한이 프로젝트의 특정 메서드에 속성이있는 측면을 수동으로 추가하려고했지만 측면이 트리거되지 않습니다.

Edit2 : 테스트에 사용하는 방법입니다.

[MethodBoundaryAspect]
public bool Foo(string bar1, string bar2)
{
            // at runtime test contains indeed one attribute MethodBoundaryAspect
            var test = this.GetType().GetMethod("ValidateUser").GetCustomAttributes(false);
            //here the exception is caught higher up but the "onException" of my attribute doesn't trigger
            throw new Exception("test exception");
}

그리고 내 postsharp 측면 :

namespace ExceptionAutoSerializer.Aspects
{
    [Serializable]
    public class MethodBoundaryAspect : OnMethodBoundaryAspect
    {

        //[...]

        public override void OnEntry(MethodExecutionArgs args)
        {
            //[...]
        }

        public override void OnSuccess(MethodExecutionArgs args)
        {
            //[...]
        }

        public override void OnException(MethodExecutionArgs args)
        {
            //[...]
        }
    }
}

답변

3 Amon Nov 30 2020 at 21:27

PostSharp Technologies의 개발자 의 오래된 답변 에 따르면 :

PostSharp는 (현재) 웹 사이트 프로젝트에서 사용되지 않는 MSBuild (John Saunders도 언급했듯이)를 통해 통합됩니다.

핵심 PostSharp는 명령 줄 도구이지만 MSBuild에서 너무 많은 정보를 가져 와서 별도로 작동하도록 만드는 것이 매우 어렵습니다 (처음에는 조언도 문서화도 지원도 지원하지도 않음). 다니엘 발라스

4.3 이전 버전의 해당 주제에 대한 업데이트를 찾지 못했습니다. 4.3 이하의 경우 이전 답변 과이 문서 (p. 45) 에 따르면 웹 사이트 프로젝트는 지원되지 않습니다.

편집 : 이전에 인용 한 저자에게 현재 타당성에 대해 질문 할 때 댓글로 응답 했습니다 .

@Amon 프로젝트가없는 웹 사이트 (VS 2017 이상에서는 IIRC를 UI에서 만들 수 없음)의 경우 여전히 사실입니다. 그러나 csproj / vbproj (.NET 또는 .NET Core)가있는 모든 웹 프로젝트가 예상대로 작동합니다 (그 이후로도 변경되지 않았습니다). – 다니엘 발라스