1

我们的应用程序由混合 C#/托管 C++ CLI/本机 C++ 程序集和 DLL 组成。

我们有一个封装程序集,它公开了应用程序的 API。

例如...要创建使用 API 的新控制台应用程序,您必须引用该程序集,并将控制台应用程序的输出目录设置为我们已安装应用程序的 BIN 目录。(由于使用反射等,所有内容都必须保留在应用程序的 BIN 目录中并输出到该目录,您不能仅对一个程序集进行本地复制,否则无法正常工作)

我的问题是在创建 ASP.NET Web 表单应用程序(与控制台应用程序无关)时,我想使用该程序集,因此我需要 Web 应用程序“存在”在我们应用程序的 BIN 目录中。

当我尝试由于 ASP.NET 尝试预加载该 BIN 目录中的每个程序集而发生错误时。

有人可以提供有关如何使其工作的说明吗?我现在已经花费了几个小时来研究引用程序集的每个组合,将它们全部复制并尝试使用 LoadFrom。

4

1 回答 1

1

没有看到这个结构很难,但是......

Bin 参考

创建一个 Web 应用程序并通过 bin 引用从网站引用必要的 dll

右键单击 Web 应用程序,选择浏览选项并选择您需要引用的 dll。选择 copy local to true 这样您就可以将 dll 复制到 Web 应用程序中,这样您就不会永远依赖于控制台应用程序与 Web 应用程序相关的确切位置。

不过,这不是我一定会采用的解决方案——系统的架构似乎有点偏离。交叉你必须裸露等......

或者

GAC 引用

您需要从控制台应用程序引用的 dll - 强烈命名它们并将它们放在 GAC(全局程序集缓存)中。这两个应用程序都将能够看到它们。

复制dll

我想还有另一种解决方案是向控制台应用程序添加一个后期构建步骤,该步骤重新运行一个批处理文件,该批处理文件将通过 dll 复制到 Web 应用程序中。我认为这实际上与 bin 参考几乎相同。

探测元件

您可以使用<probing>web.config 中的一个元素来指示 CLR 搜索其他目录以进行汇编(它通常只执行 GAC 和 bin(为了公平起见,这是一种简化))。这将使您能够引用您的 API 文件夹 - 但前提是它位于您的应用程序路径下。尽管这里有人使用 NFTS 结来解决这个问题。

更多信息在这里

事实上,这个答案提供了关于这种事情的更多细节

如何在 ASP.net 应用程序中引用 bin 文件夹外的程序集?

还有祝你好运

于 2013-06-24T18:16:08.037 回答