1

在任何使用新的 VS2017 csproj 格式(.NET Core、Standard 或 Framework)的项目上,除非 PostSharp 是直接的 NuGet 依赖项,否则不会将方面编织到代码中。

例如,如果我创建一个依赖于PubComp.Caching.AopCaching的 .NET Core 项目,该项目依赖于 PostSharp,它将允许我使用在 AopCaching NuGet 中定义的方面。该项目将编译,但 PostSharp 方面实际上并未编织到代码中。使其工作的唯一方法是将 PostSharp 作为直接 NuGet 依赖项安装。

我认为这与 msbuild 为新的 csproj 解析 NuGet 依赖项的顺序以及 PostSharp 的 IL 代码编织发生的时间有关。

有谁知道它为什么会发生?除了记住始终安装 PostSharp 之外,还有其他解决方案吗?

4

1 回答 1

2

有问题的包在其.nuspec文件中使用以下对 PostSharp 的引用:

<dependency id="PostSharp" version="6.0.28" exclude="Build,Analyzers" />

这特别排除了 PostSharp 的构建脚本,这些脚本没有注入到构建中,因此不会执行 PostSharp。这不会发生在非 SDK 项目中。

这并非不可能,因为作者不希望他们的包导致依赖包都执行 PostSharp。

供参考; 如果您查看 PostSharp 的包结构,它对于每个包含方面的库都有两个包,例如PostSharp.Patterns.Common(构建时包),它引用PostSharp.Patterns.Common.Redist(运行时包)。构建时包包含仅构建时组件,并具有对PostSharp包含所有构建时工具的包的引用。运行时包包含运行时 DLL 和引用PostSharp.Redist包。

这允许依赖包选择是否需要构建时间或运行时依赖图。

于 2019-09-16T08:17:18.450 回答