如何强制 visual studio 在编译时检查损坏的文件引用

How to force visual studio to check for broken file references at compile time

这个问题专门针对 file references

我的项目引用了库 A。库 A 引用了库 B。 如果我不添加对库 B 的直接引用,该项目将编译正常,但在尝试加载库 A 时会在运行时抛出 "could not load file or assembly B" 异常。

那么,我如何强制 visual studio 在编译时检查所有损坏的文件引用?或者,有没有其他方法可以找到这些损坏的引用(工具、VS 扩展等)

这是一个重现该行为的示例项目。 https://github.com/RaikolAmaro/BrokenDependencies

这不是编译时问题,因为在编译时,所有必需的引用都存在并说明了。否则,它一开始就不会编译。

这是一个运行时间问题,Visual Studio不太关心想要在输出目录中包含什么。这就是为什么您可以完全控制要从 NuGet 包和其他项目复制哪些元素。为什么?因为您可能正在使用安装程序或打包解决方案,或者有一些神奇的程序集解析代码来查找您的依赖项。您可能依赖插件或基于配置的依赖注入。太多的东西会阻碍像这样的扫描。

还有一个问题。虽然一个程序集可能依赖于某个其他程序集,但您的代码可能不需要它。就是这种情况,如果您的代码从不加载需要其他程序集的代码路径,那么您的输出目录中就不需要它 运行.

有一些工具可以扫描项目中的所有代码路径、它们所依赖的程序集等等。这些可用于查看您是否拥有 运行 代码所需的所有二进制文件。

这些工具有问题。同上提到的问题。如果您通过配置或约定(例如基于反射)使用依赖注入或进行自己的反射,或依赖于 dynamic 关键字,那么这些工具可能无法找到您依赖的所有代码路径,并且可能需要一些配置或源内注释在扫描时弄清楚。