2009-12-30 73 views
0

我的Visual Studio解决方案有几个后期绑定的项目(dll),它们在运行时由其他项目加载。加载的dll取决于一些运行时条件。在不导入类型的情况下添加引用

要在运行时加载dll,我需要它出现在应用程序的bin目录中,并且有几个这样的应用程序。为此,我运行一个后期构建脚本,将后期绑定的dll复制到每个可能需要它的应用程序。我想摆脱这个脚本,因为它创建了一个非常重要的xcopy后构建过程。

你在这种情况下使用什么?

我也可以从每个应用程序中添加对dll的引用,但是在这种情况下,我将创建一个类型引用,并且我(或其他开发人员)可能偶然引用了一个类型,可能不会出现在客户端服务器。

回答

1

我以前也处理过这个问题,这很令人沮丧。我现在采用的方法是删除目录依赖项;将这些后期绑定库的位置(在配置文件中)外部化,然后将它们保存在一个共享位置,您可以将这些库的构建输出设置为共享位置。

当涉及到部署时,您可以更改该设置并使用安装程序打包库。

这在开发/调试几个独立应用程序时特别有用,因为您只需要跟踪库的单个副本。

如果这不是您的选择 - 可能外部化太困难了,或者从一个应用程序到下一个应用程序的依赖关系可能存在重大差异 - 那么我会选择nobugz的答案。

0

更改所有后期绑定项目的构建输出,以便直接在您希望它们延迟绑定的项目中构建。因此,而不是将它们构建到自己的/ bin/debug /目录,将它们构建到../MyMainApp/bin/Debug/。

+0

谢谢,狡猾。构建输出已被重定向。问题是需要将dll复制到多个文件夹,因为解决方案包含多个独立的应用程序。我也在考虑为所有后期绑定的dll共享父文件夹。 – 2009-12-30 18:06:30

+0

我们在这里也有类似的情况,为了解决这个问题,我们将所有项目构建到同一个目录(c:\ OurProductName)。因此该文件夹包含我们所有的所有DLL和所有应用程序(EXE)。 – Sylvain 2009-12-30 18:12:03

1

您不必将其作为引用程序集将其复制到客户端项目中。项目+添加现有项目,选择DLL。将其构建操作设置为“无”,将复制到输出为“复制,如果更新”。

+0

nobugz:只有在客户端项目中有对这些DLL的引用时才会自动执行。他写道,他宁愿不添加引用(请参阅他的最新评论)。 – Sylvain 2009-12-30 18:48:39

相关问题