Asp.net mvc 多个Asp.Net项目之间的共享代码

Asp.net mvc 多个Asp.Net项目之间的共享代码,asp.net-mvc,multiple-projects,Asp.net Mvc,Multiple Projects,在同一台服务器上的多个web应用程序之间共享bin文件夹、DLL和其他资源文件(如css)的最佳做法是什么 我已经将公共代码分离为它们自己的程序集,但是我想知道如何部署等等。我基本上希望所有公共文件都位于web服务器上的一个位置,然后让每个web应用引用该公共位置 目前我不知道如何告诉Asp.net网站从其他位置使用bin文件夹 如果有什么区别的话,这些都是ASP.NET MVC应用程序 谢谢你的帮助。mklink- 另外,请在ServerFault上查看此问题-最佳实践建议您不要这样做 每个应

在同一台服务器上的多个web应用程序之间共享bin文件夹、DLL和其他资源文件(如css)的最佳做法是什么

我已经将公共代码分离为它们自己的程序集,但是我想知道如何部署等等。我基本上希望所有公共文件都位于web服务器上的一个位置,然后让每个web应用引用该公共位置

目前我不知道如何告诉Asp.net网站从其他位置使用bin文件夹

如果有什么区别的话,这些都是ASP.NET MVC应用程序

谢谢你的帮助。

mklink-


另外,请在ServerFault上查看此问题-

最佳实践建议您不要这样做

每个应用程序都是不同的,请将其视为不同的应用程序。通过共享资源,您在项目之间创建了一个隐式的依赖关系——如果您更改了共享资源,那么您就是在为所有人更改它——不管它是否是有意的

如果您真的必须共享资源,请在源代码管理或构建级别进行—在该级别上打破依赖关系要比在生产服务器上部署依赖关系后打破依赖关系容易得多


Xanadont,共享公共库等是可以的(这基本上是像nHibernate这样的开源项目所做的),但在生产服务器上共享bin文件夹的级别上这样做会产生比解决问题更多的问题。最好通过创建共享库来实现您所谈论的那种重用,这些库是源代码管理中的独立项目,并且在某处维护二进制版本。然后,希望使用共享库的项目通过将二进制文件复制到解决方案源树的lib文件夹并引用该二进制文件,对共享库进行二进制依赖。这允许维护和更新共享库,而不会由于对它们的直接依赖而产生副作用,使用这些库的解决方案可以评估修复/更新,以确定它们将如何影响依赖它们的代码,以及升级是否值得


Scott,您所指的是视图层中有变化的1个应用程序(模板),而不是业务逻辑中有变化的50个应用程序。这种应用程序的最佳方法是多租户(我假设每个城市也有一个数据库),并使用url定义一个上下文,从中可以访问数据库并解析视图路径(如果不更好地理解应用程序体系结构,很难描述更好的方法)

基于url更改视图可以通过实现上下文感知的视图引擎来完成(有关如何执行此操作的示例,请参阅)


使用这种方法,您只有一个位置需要使用修复程序进行更新,但您可以通过添加一组新模板和(取决于您如何设置路由)轻松为另一个城市创建一个新的“站点”将新域指向您的站点。如果您有一组默认模板,如果不存在自定义设置,您的视图引擎甚至可以返回到这些模板,因此允许您仅通过将新域指向应用程序来设置新站点。

我使用以下技术:
我有多个ASP.net应用程序项目,其中包含ascx控件、资源等…我已经实现了虚拟路径提供程序来解析这些应用程序之间的虚拟路径。它工作得非常好。我还实现了特殊的http处理程序,以使文件可下载。如果您需要示例,请查看源代码。

我不同意。共享公共路径Nctuistic和资源是代码库背后的全部思想。这也是为什么你拥有.NET平台——许多很好的捆绑在框架中的公共功能的原因。为什么不把这个想法扩展到你的组织的通用功能?考虑堵塞安全漏洞的场景——在“共享资源”中这样做。环境和你在一个地方处理所有事情。否则,你可能会意外忘记某个网站的更新,现在你有问题。在最坏的情况下,这可能是非常危险的。我分享是因为这是同一个web应用程序,跨多个城市。因此,所有功能都是相同的,但每个城市都会我有一个稍微修改过的HTML前端。对我来说,一遍又一遍地复制所有不变的中间层代码是业余的。当我有50个城市,我需要对数据库做一点小小的更改时会发生什么?我必须更新50个独立的bin文件夹中的DLL?我意识到我可以编写部署脚本,但是……Scott,我强烈推荐y您需要重新考虑应用程序的构建方式,并对其进行修改,使其能够在单个web应用程序下处理所有这些类似的网站。只需一点代码,您就可以轻松地将控制器指向每个“站点”的不同视图/DB因此,它们的渲染方式会有所不同,但会自行维护。谢谢Neil。所有城市都共享同一个数据库,所以我真的认为这里由几张海报和您自己提出的多视图解决方案是可行的。请不要再问同样的问题,因为您没有得到想要的答案:。