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) 项目
- Postsharp.Question.Test.Fails 默认项目设置 + projectreference to 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-project 中,这方面不起作用,我想知道我如何才能做到 运行(不添加参考),或者我怎么能指出所使用的方面不会 运行 任何人使用该库。
如果这不可能,我想知道如何强制使用 Postsharp.Why 项目的任何人安装该软件包?
提前致谢!
在库项目中包含 PostSharp 包引用(PostSharp.Why 在这种情况下)以下方式使引用项目使用 PostSharp 构建:
<PackageReference Include="PostSharp" Version="6.7.9-rc" PrivateAssets="none" />
将你的库打包到一个 NuGet 包中,将 PostSharp 包作为依赖项也可以,但除非你要发布你的库,否则这是一种矫枉过正,如前所述。
如标题所示,我在重用自定义方面时遇到问题。我在一个名为 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) 项目
- Postsharp.Question.Test.Fails 默认项目设置 + projectreference to 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-project 中,这方面不起作用,我想知道我如何才能做到 运行(不添加参考),或者我怎么能指出所使用的方面不会 运行 任何人使用该库。 如果这不可能,我想知道如何强制使用 Postsharp.Why 项目的任何人安装该软件包?
提前致谢!
在库项目中包含 PostSharp 包引用(PostSharp.Why 在这种情况下)以下方式使引用项目使用 PostSharp 构建:
<PackageReference Include="PostSharp" Version="6.7.9-rc" PrivateAssets="none" />
将你的库打包到一个 NuGet 包中,将 PostSharp 包作为依赖项也可以,但除非你要发布你的库,否则这是一种矫枉过正,如前所述。