使用我们自己的 Nuget 包安装时,如何将 PostSharp 包含在 ASP.NET WebApi 项目的构建过程中?

How to have PostSharp included in build process for ASP.NET WebApi project when installed using our own Nuget package?

我们有一个 class 库(C#、.NET 5),我们在其中添加了对 PostSharp nuget 包的引用(在我们的 csproj 文件中使用 PackageReference)并实现了一个PostSharp OnMethodBoundaryAspect。然后这个 class 库被打包成一个 Nuget 包,供我们的微 services/WebApi-projects.

使用。

当我在我们的一个 ASP.NET WebApi 项目中添加对此 nuget 包的引用时,我看到对 PostSharp 和 PostSharp.Redist 的引用也与我们的 class 一起包含在内图书馆。

但是,当将 OnMethodBoundaryAspect 添加到 WebApi 项目中的一个函数时,方面中的代码未被执行。如果我直接在 WebApi 项目中添加对 PostSharp 的引用,它就可以正常工作。

当 PostSharp 被包含在我们自己的 Nuget 包中时,如何确保它被包含在我们的 WebApi 项目的构建过程中?

这个对 Whosebug 上另一个问题 () 的回答提到 PostSharp.targets 需要包含在构建过​​程中,安装 PostSharp nuget-package 将实现这一点,但是如果我想要从我们自己的 Nuget 包中包含 PostSharp,并以这种方式将其包含在 WebApi 项目的构建过程中,我该如何解决这个问题?

这是 NuGet 的项目引用行为的结果(包的构建时部分不是从引用的项目中获取的)。

对于您自己的包,在 PostSharp 包上具有依赖性(在 .nuspec 文件或适当配置的 csproj 中)就足够了,然后它将包含所有 PostSharp 包资产您引用包的项目(如果您未指定任何 includeAssetsexcludeAssets,则这是 NuGet 依赖项的默认行为)。

如果你的项目文件中有 PackageReference,你还需要将 privateAssets 设置为 none,因为默认行为是 Build,Analyzers:

<PackageReference Include="PostSharp" Version="6.9.9" PrivateAssets="none" />