【问题标题】:Build output reference assemblies to subfolder将输出参考程序集构建到子文件夹
【发布时间】: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


【解决方案1】:

您可以将参考文献放在单独的文件夹中。方法如下:

  • 将文件夹添加到您的项目根目录。

  • 将文件夹重命名为适当的名称。

  • 右键单击文件夹并从 添加 -> 现有项目

  • 现在选择任何引用程序集并将其添加到此文件夹。 您可以将文件添加为链接

  • 右键单击参考并转到 添加参考 -> 浏览

  • 导航到新创建的文件夹并选择程序集。

  • 将每个参考的复制到本地设置为True

  • 构建您的项目。

【讨论】:

  • 感谢@raidensan,这是个好主意,事实上,我的大部分引用都是从 NuGet 作为包依赖项添加的,所以手动查找它们有点痛苦。如果没有其他解决方案,这可能是我会去的
  • 检查此answer 以获取 nuget 包。有可能达到你所需要的。
  • 您指向有关使用 nuget.config 的答案的链接仅指定解决方案所需的包应还原到的位置。但是在构建解决方案时,所有依赖项也会写入bin 文件夹,而不是子文件夹中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 2012-10-11
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多