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

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

问题描述:

希望ASP.NET专业人员能够回答这个问题。我有一个包含网站和Web服务的Web应用程序 - 它们都有几个常见的组装参考(数据访问层,实用程序等) - 但是,最近对Web服务所做的更改将需要不同的版本常见程序集,该网站将无法使用的版本(如果您想知道,该网站是一些传统的1.x .NET代码,在使用较新的版本程序集时会发生爆炸。)ASP.NET:多个程序集版本,相同的Web应用程序

任何人都可以想到一种允许我的Web服务引用一个版本并让我的网站引用另一个的方法?我明显可以在bin文件夹中只有一个具有相同名称的版本。

谢谢!

(PS - 这只是我恍然大悟,我也许可以编译和使用不同的名称引用通用组件,并把那些在web应用程序的文件夹 - 但听起来实在的fugly ...)

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

+0

同意。他们听起来像是两个应用程序,应该真正分离。 – RichardOD 2009-05-28 20:47:52

您可以使用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> 
+0

如何解决这个问题,但是如果他在依赖于同一个程序集的不同版本(具有不同功能)的站点中有ASMX和ASPX的话。 – 2009-05-28 19:01:22

+0

我不认为这会解决我的特殊问题,但可能很高兴知道 - 谢谢! – Charles 2009-05-28 19:12:37

我有一个包含一个网站,一个Web应用程序和web服务

是因为您的主要问题,你已经发布了部分功能的应用程序,它依赖于两个不同的库代码库...

即使你要用不同的名称复制并重新引用你的常用程序集,你仍然留心(原谅这句):re:组件中所有类的名称空间。

我认为最好的办法是暂时将Web服务从您的Web应用程序中取出,然后将它们作为两个独立应用程序托管,直到您可以清理您的Common Lib的版本问题。

我不认为使用不同的名称编译更新的集合到assmebly将工作 - .NET仍然会看到相同的命名空间 - 所以充其量,你会有“不明确的参考”或“类型x已经宣布在dll y“错误中,或者最坏的情况下,框架会加载与先调用的应用程序相关的那个(网站=> 1.1,webservice => 2.0)并忽略另一个。

最好的办法是将应用程序重构为两个网站和Web服务。

在过去的几年里,我们一直在与我们的客户之一进行这项工作 - 他们有一个建立在ASP.NET 1.1上的大型网站,但是最近对他们的独立项目已经开始移动到2.0(3.5下但很明显,仍然托管在2.0以下) - 我们基本上必须将公共代码移植到一个新的3.5库,利用新的语言功能,我们已经移动了这些部分到新的网站(在IIS中),因为它们已经完成。

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