构建Visual Studio项目而无需访问引用的dll

Dav*_*eis 7 .net c# assemblies stub visual-studio

我有一个项目,它有一组二进制依赖项(程序集dll,我没有源代码).在运行时,需要在机器上预安装这些依赖项,并且在编译时,它们在源代码树中是必需的,例如在lib文件夹中.由于我还为此程序提供了源代码,因此我想为其启用简单的下载和构建体验.不幸的是,我不能重新分配dll,这使事情变得复杂,因为VS不会在没有访问引用的dll的情况下链接项目.

反正是否有能够在没有真正引用的dll的情况下构建和链接这个项目?

也许这是一种告诉VS链接自动生成的dll存根的方法,以便它可以在没有原始的情况下重建?也许有第三方工具可以做到这一点?这个领域有任何线索或最佳实践吗?

我认识的人必须能够访问这些DLL运行的代码,因此它是有道理的,他可以将它们添加到构建过程,但我只是想救他们收集所有的dll文件,并把他们在痛苦lib文件夹手动.

Oli*_*ver 2

也许以下想法之一可以帮助您解决问题:

  • 从第 3 方 dll 中的所有类派生接口。将这些接口放入自己的项目(同一解决方案)中,并添加对此接口程序集的引用。还将 EventHandler 添加到AppDomain.AssemblyResolve并尝试在运行时查找并加载程序集。(学分归NG)
    • 根据 dll 有多大以及对公共部分进行更改的频率,这可能会带来真正的痛苦。
  • 提供 readme.txt,其中说明如何获取所需的程序集以及用户应将它们放置在相对于项目路径的位置。通常,VS 足够聪明,可以在您将程序集放入项目引用它的正确位置后立即删除感叹号(也许您必须在解决方案资源管理器中按刷新)(感谢 Paul)
    • 不要忘记将 readme.txt 添加到您的解决方案中,方法是右键单击您的解决方案并选择“添加 -> 现有项目”。在这种情况下,它将在 Visual Studio 解决方案资源管理器中占据相当显着的位置,用户可以通过双击来阅读它。
  • 在您的解决方案中创建另一个项目,该项目能够自动下载所有需要的 dll 并将它们放入正确的位置。也许它应该在开始下载之前预先检查这些所需的文件是否已经存在。设置原始项目的项目依赖关系,使其依赖于此。所以它总是会在你原来的之前构建。然后在原始项目的预构建事件中启动此下载帮助程序工具,并且不要忘记使用 int 值退出程序。0 表示成功,任何其他错误,因此 Visual Studio 也知道您的工具是否成功,并在挂起丢失的 dll 之前停止编译过程。
    • 也许自动下载文件几乎是不可能的,因为您需要登录网页或使用一些无法通过工具自动化的cookie、flash、验证码等。