【发布时间】:2017-03-15 04:49:52
【问题描述】:
背景
我的程序集(一个 DLL)正在由第三方应用程序加载,我无法控制它的加载方式。第三方应用程序将加载给定目录中的所有程序集。
问题
如果我的程序集和另一个程序集使用相同的库,但版本不同,它们将位于同一目录中并且会发生冲突。我已经研究了<probing> 配置文件指令和程序集解析器,所以我知道如何创建一个子目录并让我的程序集搜索它以查找参考。
需要
我需要一些配置 Visual Studio 的方法来将我的主 DLL 构建到根文件夹中,并将所有引用构建到一个子文件夹中。最好在构建期间(因为我将构建配置为直接转到正确的文件夹。
【问题讨论】:
-
不幸的是,这可能是一个比 DLL 所在位置更大的问题。即使这些 DLL 是从它们各自的目录中加载的,如果它们被加载到同一个应用程序域中,也可能会发生冲突。如果您确定这不是问题,您可以使用 Fody Costura 之类的工具来简单地包装您的依赖项并作为单个 DLL 发布。
-
另外我要提一下,如果您不想将它们包装到单个 DLL 中,您可以使用构建后事件来简单地将所有 DLL(除了您自己的程序集)复制到子目录中.那么问题是第三方 DLL 是否知道如何从子目录中加载这些依赖项。
-
感谢@Paul,加载我的程序集的第三方工具不是太大问题,程序集解析器目前正在处理该部分。目前我正在研究后期构建任务,或者 Raidensan 的解决方案是最好的
标签: c# .net visual-studio build .net-assembly