情况
程序集 Adam.dll 引用了程序集 Frank.dll。 Adam.dll 放置在共享程序集文件夹中,然后由我的应用程序作为二进制引用进行引用。
如果我运行我的应用程序,它会崩溃(这是正确的),因为 Frank.dll 丢失。
但是,如果我将 Frank.dll 放在共享程序集文件夹中,.net 编译器足够智能,可以将其移动到 bin 文件夹,并且即使我的应用程序中没有直接引用 Frank.dll,我的应用程序也将运行
我想要什么
.net 编译器显然足够聪明,能够实现我的应用程序需要 Frank.dll。 是否可以设置编译器选项以在编译时将其标记为错误?
我不确定您正在谈论哪种“共享程序集”文件夹,但我不太确定 Visual Studio 是否真的“意识到您的应用程序需要 Frank.dll” - 我怀疑更有可能的是它正在复制在那里找到的all程序集。如果您在那里放置一个不相关的程序集会发生什么?如果您可以更详细地了解事物的具体位置、您正在创建的项目类型以及如何添加对 Adam.dll 的引用,那将会有所帮助。
我不知道有什么方法可以在所有情况下强制复制依赖程序集 - 因为实际上,它可能没有必要。例如,只有当您使用 Adam.dll 的某些功能时,才可能需要 Frank.dll。
如果您在 Adam 中使用的某种类型在其公共 API 中公开了 Frank 的类型,那么编译器会给您一个错误 - 但显然您不想只是为了好玩而向公共 API 添加位。
虽然我知道这不是您正在寻找的答案,但我认为您可能只能微笑着忍受……您的代码是否具有足够复杂的依赖关系,这才是真正的问题?您是否可能由于缺少依赖项而浪费足够的时间,以至于值得尝试提出一个方案来“修复”它?您可以编写一个程序来加载应用程序的程序集,找到其所有依赖项,然后检查它们是否全部存在并递归。它可能会忽略 GAC 中已有的依赖关系。我只是不确定这是否值得。