Postsharp:如果不另外引用 postsharp,则无法使用共享库中我自己的方面 - 为什么?

Postsharp: my own aspect in shared library can't be used without additionally referencing postsharp - Why?

如标​​题所示,我在重用自定义方面时遇到问题。我在一个名为 Postsharp.Why 的项目中创建了一个非常简单的方面 (netstandard2.0)(引用 nuget PostSharp 6.7.9-rc)

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) 项目

代码:

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-project 中,这方面不起作用,我想知道我如何才能做到 运行(不添加参考),或者我怎么能指出所使用的方面不会 运行 任何人使用该库。 如果这不可能,我想知道如何强制使用 Postsharp.Why 项目的任何人安装该软件包?

提前致谢!

在库项目中包含 PostSharp 包引用(PostSharp.Why 在这种情况下)以下方式使引用项目使用 PostSharp 构建:

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

将你的库打包到一个 NuGet 包中,将 PostSharp 包作为依赖项也可以,但除非你要发布你的库,否则这是一种矫枉过正,如前所述。