Postsharp:共享库中我自己的方面不能在不另外引用postharp的情况下使用-为什么?

问题描述

正如标题所示,我在重用自定义方面时遇到问题。我在名为 Postsharp.Why (引用nuget PostSharp 6.7.9-rc

的项目中创建了一个非常简单的方面(netstandard2.0)。
namespace Postsharp.Why
{
using System.Threading.Tasks;

using PostSharp.Aspects;
using PostSharp.Serialization;

[PSerializable]
public class ReasonAttribute : MethodInterceptionAspect
{
 
    private string _reason;

    public ReasonAttribute(string reason = "i fail to see")
    {
        this._reason = reason;
    }

    public sealed override void OnInvoke(MethodInterceptionArgs args)
    {
        args.ReturnValue = _reason;
    }

    public sealed override async Task OnInvokeAsync(MethodInterceptionArgs args)
    {
        args.ReturnValue = _reason;
    }
}
} 

此外,我还创建了两个进一步的测试(xunit)项目

  • Postsharp.Question.Test。失败 认项目设置 +对 Project.Why
  • 的项目引用
  • Postsharp.Question.Test.Works 还引用了相同的Postsharp版本。

代码

namespace Postsharp.Question.Test.Works
{
using Postsharp.Why;

public class Test_PostSharp_Aspects
{
    [Reason("!")]
    private string foooooo()
    {
        return "?";
    }

    [Fact]
    public void Test_ShouldReturn_Exclamation()
    {
        Assert.Equal("!",foooooo());
    }
}
}

请注意,所有项目都可以正常编译,没有错误。顾名思义,在 Fail 项目中,该方面不起作用,我想知道如何使它运行(不添加引用),或者如何指出使用的方面将不会对使用该库的任何人运行。 如果无法做到这一点,我想知道我该如何强制使用 Postsharp.Why 项目的任何人安装该软件包?

谢谢!

解决方法

通过以下方式在库项目中包含PostSharp包引用(在本例中为PostSharp。为什么),使得使用PostSharp构建引用项目:

<PackageReference Include="PostSharp" Version="6.7.9-rc" PrivateAssets="none" />

将您的库打包到具有PostSharp包作为依赖项的NuGet包中也可以,但是,除非您要发布您的库,否则就太过分了。