【问题标题】:How to create and run an ASP.NET website in an installed application's bin directory如何在已安装应用程序的 bin 目录中创建和运行 ASP.NET 网站
【发布时间】:2013-06-24 18:11:27
【问题描述】:

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

我们有一个暴露应用程序 API 的包装程序集。

例如...要创建使用 API 的新控制台应用程序,您必须引用该程序集,并将控制台应用程序的输出目录设置为我们已安装应用程序的 BIN 目录。 (由于使用了反射等,一切都必须留在应用程序的 BIN 目录中并输出到该目录,您不能只复制一个程序集的本地副本,否则不起作用)

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

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

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

【问题讨论】:

  • 如果没有看到设计的完全集群f**k,它真的很难帮助你。我强烈建议您与此设计者交谈。
  • 谢谢,但该应用程序已经存在 20 年了,而且非常成功。
  • 仅仅因为某些东西已经存在了很长时间并不能使设计变得好。实际上,它更有可能做出了很多选择,而这些选择阻碍了你做你想做的事情。
  • 我同意,我只是想说重新设计将很难卖。
  • 我认为每个人都不得不使用......远远低于最佳状态的应用程序。我非常同情 Darren。让我告诉你一个我必须使用 10000 种方法的应用程序,完全破坏了页面模型 rant rant rant rant

标签: asp.net .net web-applications


【解决方案1】:

没有看到它的构造很难,但是......

Bin 参考

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

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

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

GAC 参考

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

复制 dll

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

探测元素

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

更多信息here

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

How do I reference assemblies outside the bin folder in an ASP.net application?

祝你好运

【讨论】:

  • 我编辑了我的问题以消除对控制台应用程序的混淆。那只是为了解释我们通常做什么来使用暴露 API 的程序集。 Web 应用程序不需要控制台应用程序,但确实需要引用公开 API 的程序集,并且公开 API 的程序集必须与所有其他程序集位于同一 BIN 目录中。 (我认为加载本机程序集是原因)
  • 谢谢。我仍然认为 bin 引用会起作用。或者可能是 Web 应用程序的预构建步骤,将 API 的内容复制到 Web 应用程序的 bin 文件夹中。如果他们都是相互依存的,那么很多事情就必须过去。在网络应用程序中,您通常有一个第三方文件夹,您可以在其中放置所有外部库并从那里引用 - 作为将 gthem 直接放入 bin 的替代方法。如果您让我们知道为什么这不起作用,那么我们都可以为您想出别的办法。干杯
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多