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

Posted

技术标签:

【中文标题】使用我们自己的 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? 【发布时间】:2021-11-21 05:55:03 【问题描述】:

我们有一个类库(C#、.NET 5),我们在其中添加了对 PostSharp nuget-package 的引用(在我们的 csproj 文件中使用 PackageReference)并实现了 PostSharp OnMethodBoundaryAspect。然后将这个类库打包到 Nuget 包中,供我们的微服务/WebApi 项目使用。

当我在我们的一个 ASP.NET WebApi 项目中添加对此 nuget 包的引用时,我看到对 PostSharp 和 PostSharp.Redist 的引用也包含在我们的类库中。

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

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

这个对 *** 上另一个问题 (https://***.com/a/68470518/182380) 的回答提到 PostSharp.targets 需要包含在构建过​​程中,安装 PostSharp nuget-package 会实现这一点,但是如果我想从我们的拥有 Nuget-package 并以这种方式将其包含在 WebApi-project 的构建过程中,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

在我们的 Nuget 包中,我们在 csproj 文件中引用了 Postsharp,如下所示:&lt;PackageReference Include="PostSharp" Version="6.9.9" /&gt; 如果我理解正确,这应该足够了吗?我们在这个类库中没有 nuspec 文件,我们只是调用“dotnet pack”来引用这个 csproj 文件。仍然必须在引用我们自己的 Nuget-package 的项目中添加对 PostSharp 的引用。 我忘了提到 dotnet pack 使用的 PackageReferences 你还需要将PrivateAssets 指定为none,因为默认是Build,Analyzers。这将导致生成正确的.nuspec 文件。这意味着参考应该是:&lt;PackageReference Include="PostSharp" Version="6.9.9" PrivateAssets="none" /&gt; 非常感谢丹尼尔,这就像一个魅力:-)

以上是关于使用我们自己的 Nuget 包安装时,如何将 PostSharp 包含在 ASP.NET WebApi 项目的构建过程中?的主要内容,如果未能解决你的问题,请参考以下文章

如何托管我自己的nuget v3 Feed?

详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器

手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行

容器环境下如何将NuGet包XML文档添加到Swagger

如何正确引用nuget包,这样就不会对路径进行硬编码

如何从 NuGet 安装 EntityFramework 5.0(和其他旧版本)?