ASP.NET:多个程序集版本,相同的Web应用程序

时间:2009-05-28 18:54:12

标签: c# .net asp.net vb.net legacy

希望你的ASP.NET专业人士可以回答这个问题。我有一个包含网站和Web服务的Web应用程序 - 它们都有几个共同的程序集引用(数据访问层,实用程序等) - 但是,最近对Web服务所做的更改将需要不同的 常见程序集的版本 ,网站无法使用的版本(如果您想知道,该网站是一些遗留的1.x .NET代码,在使用较新的版本程序集时会爆炸。)

有人能想出一种方法来允许我的网络服务引用一个版本并让我的网站引用另一个版本吗?我显然在 bin 文件夹中只有一个版本具有相同的名称。

谢谢!

(PS - 我突然意识到我可以编译并引用具有不同名称的常见程序集,并将它们放在Web应用程序的 bin 文件夹中 - 但这听起来真的很难看...... 。)

4 个答案:

答案 0 :(得分:1)

或者您可以将Web服务分离为独立于网站的新应用程序。

答案 1 :(得分:1)

您可以使用web.config的运行时部分来指定要使用的dll(我们之前已经为SQLLite做过):

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <qualifyAssembly partialName="System.Data.SQLite" fullName="System.Data.SQLite, Version=1.0.60.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
    </assemblyBinding>
  </runtime>

答案 2 :(得分:1)

  

我有一个包含网站和网络服务的网络应用程序

那是你的主要问题,你已经发布了一个部分运行的应用程序,它依赖于两个不同的库代码库......

即使您要使用不同的名称复制和重新引用您的通用程序集,您仍然保持原谅(请原谅该短语)re:该程序集中所有类的命名空间。

我认为你最好的选择是将web服务暂时从你的Web应用程序中取出,并将它们作为两个单独的应用程序托管,直到你能解决你的Common Lib的版本问题。

答案 3 :(得分:0)

我不认为使用不同的名称将较新的集合编译成一个可用的东西 - .NET仍然会看到相同的名称空间 - 所以最好你有“不明确的引用”或“类型x已经在声明dll y“错误,或者在最坏的情况下,框架会加载与首先调用的应用程序部分相关的那个(网站=&gt; 1.1,webservice =&gt; 2.0)并忽略另一个。

您最好的选择是将应用程序重构为两个 - 网站和Web服务。

我们在过去几年中与我们的一个客户一直在这样做 - 他们有一个基于ASP.NET 1.1构建的庞大站点,但最近独立的项目已经开始转向2.0(3.5以下)引擎盖,但显然它仍然在2.0下托管 - 我们基本上不得不将公共代码移植到一组针对3.5构建的新库中,利用新的语言功能,我们已将这些部分移至新网站(在IIS中)完成后。

这不是理想的,是的,我们留下了两个代码库副本(1.1和2.0),并且通常必须在两个地方推出任何修复程序,但它似乎是开始移动它们的最佳方式。 / p>

相关问题