使用我们自己的 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
包资产引用了您的包(如果您未指定任何 includeAssets
和 excludeAssets
,这是 NuGet 依赖项的默认行为)。
如果您的项目文件中有PackageReference
,您还需要将privateAssets
设置为none
,因为默认行为是Build,Analyzers
:
<PackageReference Include="PostSharp" Version="6.9.9" PrivateAssets="none" />
【讨论】:
在我们的 Nuget 包中,我们在 csproj 文件中引用了 Postsharp,如下所示:<PackageReference Include="PostSharp" Version="6.9.9" />
如果我理解正确,这应该足够了吗?我们在这个类库中没有 nuspec 文件,我们只是调用“dotnet pack”来引用这个 csproj 文件。仍然必须在引用我们自己的 Nuget-package 的项目中添加对 PostSharp 的引用。
我忘了提到 dotnet pack
使用的 PackageReferences 你还需要将PrivateAssets
指定为none
,因为默认是Build,Analyzers
。这将导致生成正确的.nuspec
文件。这意味着参考应该是:<PackageReference Include="PostSharp" Version="6.9.9" PrivateAssets="none" />
非常感谢丹尼尔,这就像一个魅力:-)以上是关于使用我们自己的 Nuget 包安装时,如何将 PostSharp 包含在 ASP.NET WebApi 项目的构建过程中?的主要内容,如果未能解决你的问题,请参考以下文章
详解.Net 如何上传自己的包到Nuget平台以及如何使用Nuget包管理器