无法解析对程序集“PostSharp”的依赖性,因为它尚未预加载

我的项目结构

  • A.dll,它通过NuGet安装PostSharp并使用它。
  • B.exe,引用A并且不使用PostSharp。

编辑:我创建了一个测试解决方案,看看我是否可以重新创建问题,并且错误消失了,所以它似乎是原始项目中的其他构建时进程。 我还不知道是什么。


我的问题

目前这会导致B的编译错误。

未知的构建错误,’无法解析对程序集的依赖关系’PostSharp,Version = 3.0.40.9,Culture = neutral,PublicKeyToken = b13fd38b8f9c99d7’因为尚未预加载。 使用ReflectionOnly API时,必须通过ReflectionOnlyAssemblyResolve事件按需预加载或加载相关的程序集。

将PostSharp安装到B会导致新警告。

模块“B.exe”不包含任何方面或其他转换。 为了提高构建时性能,请考虑通过在项目中设置编译符号(aka constant)’SkipPostSharp’来禁用此模块的PostSharp,或者设置MSBuild属性’SkipPostSharp = True’。

如果我在项目属性中禁用PostSharp,我现在会收到此错误。

#error:’构建过程中未引入PostSharp。 如果NuGet刚刚恢复了PostSharp软件包,则需要重建解决方案。

它来自RequiresPostSharp.cs,它安装在每个PostSharp项目中。


我的目标

我需要消除所有错误和警告。


我建议的解决方案

我想如果我能消除第一个错误并且需要将PostSharp添加到B,一切都会好的。 我不知道怎么解决它。


我的问题

  1. 正确/推荐的解决方案是将PostSharp安装到B,并修复第一个错误?
  2. 如果是这样,我该怎么做? 如果没有,我将如何找到合适的解决方案?

当项目BWPF应用程序时,可以再现所描述的构建错误。 在这种情况下,问题将由XAML编译器引起 – 它尝试加载由依赖项( A )引用的程序集,如果不成功则会失败。

为避免构建错误,您还需要将PostSharp引用添加到B项目中。 当然,您将获得上述警告信息。

3.1版开始,PostSharp不再将RequiresPostSharp.cs文件添加到项目中,而是在msbuild脚本中执行validation。 因此,您可以安全地禁用项目B属性中的PostSharp。 这样您就可以避免错误和警告消息。