GAC的替代方案,用于在mvc站点之间共享代码

时间:2014-05-23 01:30:35

标签: c# .net asp.net-mvc gac

目前,我们在gac中注册了c#对象,我们用它来输出html / string作为我们Web应用程序的常用菜单。

gac注册对象的好处是我们可以更新gac对象,并且引用它的所有应用程序都可以非常有效地获得更新。 html菜单在公共位置引用了一些js和css资源。

c#对象确实根据服务器/环境等执行某些逻辑。

除了GAC对象之外是否还有其他替代方法可以执行类似的功能。

我曾考虑过从另一个项目/控制器引用mvc视图,但是存在延迟问题(即菜单是在页面的其余部分之后呈现的)。我觉得它在页面的一部分呈现时效果最好。

其他想法/想法/选项?

2 个答案:

答案 0 :(得分:2)

我相信您可以使用web.config手动指示每个站点在公共位置查找特定程序集:

http://msdn.microsoft.com/en-us/library/4191fzwb(v=vs.90).aspx

来自文章:

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <codeBase version="2.0.0.0"
                   href="http://www.litwareinc.com/myAssembly.dll"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

或者,您可以设置“探​​测”来搜索整个目录中的公共库(也可以从文章中):

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2\subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

答案 1 :(得分:1)

十年来我从未使用过GAC,虽然我通过TeamCity设置了一个内部NuGet服务器,并且当我的共享库更新时让CI完成所有重建,我不会在这里使用它,我不会这样做。我想。

我的直觉是为这种东西构建一个小的Web服务,让其他服务器以可扩展的形式(JSON / XML)发送他们的数据/状态,即基于服务器/环境的逻辑所需的数据,并让Web服务执行逻辑并发送回模型中的数据以转换为HTML或HTML本身。

添加一些缓存控制标头,然后在我想要更改行为时更新Web服务逻辑。

修改

我记得Martin Fowler在博客中谈到了这种方法。

http://martinfowler.com/articles/microservices.html

所以这就是我几年来的工作方式。当然我们在DLL中有编程逻辑,但对于业务逻辑而言,不是将它放在库中,我们将它放在许多小的Web API中,然后它也可以打开其他语言和mash-up,PowerShell等。

我想我所说的是一种不同的架构方法可以提供帮助。

顺便说一句,我在2008年读到的时候,我第一次听到这个消息,亚马逊的主页收集了来自&gt; 100个小型网络服务的数据。