PostSharp 依赖项蔓延

PostSharp dependency sprawl

提问人:stan 提问时间:1/23/2023 最后编辑:stan 更新时间:1/25/2023 访问量:141

问:

我在库“Lib”中定义了一个自定义属性“attribute”,用于注释项目“Service”中的方法“method”。但是,当单元测试“方法”时(在一个不同的单元测试项目中,其中包含对“服务”的引用以依赖于它),我得到:

System.TypeLoadException:无法从中加载类型“attribute” 程序集 'Lib'。

为什么?

我尝试添加更新的单元测试项目对“Lib”的依赖关系,从而解决了异常。但是,我不明白为什么必须更新它,我认为对“属性”的引用可以封装在“服务”中,而不需要依赖“服务”的项目来升级“Lib”版本

以一种更抽象和通用的方式提问:是否可以注释代码库的最外层(例如,服务的 HTTP API 外观),或者 PostSharp 注释是否仅在 API 的使用者依赖于属性类本身时才有效。

我对 C# 相当陌生,所以我不确定这是 PostSharp 功能、c# 依赖项管理功能还是两者的混合。似乎依赖关系不是传递解析的,但是,我仍然不希望单元测试项目直接依赖于“属性”,即使它调用了一个用它注释的方法

C# NuGet 后夏普

评论

0赞 Daniel Balas 1/24/2023
您如何引用 PostSharp?如果在 .csproj 文件中使用(这是目前引用 NuGet 包的默认方式),则在未执行显式操作(如 .PackageReferencePrivateAssets="all"
0赞 stan 1/25/2023
@DanielBalas我通过<PackageReference>将其引用到包含对 PostSharp 的依赖项的库
1赞 stan 1/25/2023
我实际上在构建输出中注意到了这个警告:“2>C:\Users\stan\.nuget\packages\postsharp\2023.0.3\build\PostSharp.targets(387,5):警告PS0219:平台的目标包”。未安装 NETFramework,Version=v4.8.1”。这可能是 PostSharp 运行的平台、目标框架或其中一个引用的目标框架。请安装相应的 .NET Framework 目标包或 .NET Framework 开发人员包。 ,但我在我的解决方案中找不到任何对 4.8.1 的引用
1赞 Daniel Balas 1/26/2023
这意味着您安装了 .NET Framework 4.8.1,并且未安装引用程序集。PostSharp 需要它们在编译的程序集和运行它的运行时之间映射类型。可以使用 Visual Studio 安装程序的“单个组件”下进行安装。如果不存在,PostSharp 将回退到使用运行时程序集,这可能会导致在边缘情况下出现问题。
1赞 Daniel Balas 1/27/2023
PostSharp 需要 .NET Framework 4.8.1 的引用程序集的原因是您的计算机上安装了此版本。PostSharp 编译器需要您使用的目标框架版本 (4.6.1) 和运行它 (4.8.1) 的版本的引用程序集才能正常工作。缺少目标框架 (4.6.1) 的引用程序集会导致错误。缺少运行时框架 (4.8.1) 的引用程序集会导致警告,因为只有在几种极端情况下才需要它。

答: 暂无答案