4

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

谁能想出一种方法让我的网络服务引用一个版本并让我的网站引用另一个版本?我显然只能在bin文件夹中拥有一个同名的版本。

谢谢!

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

4

4 回答 4

1

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

于 2009-05-28T18:57:28.963 回答
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>
于 2009-05-28T19:00:00.767 回答
1

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

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

即使您要使用不同的名称复制和重新引用您的公共程序集,您仍然会被限制(请原谅这个短语):该程序集中所有类的命名空间。

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

于 2009-05-28T19:00:08.647 回答
0

我不认为将较新的集合编译成具有不同名称的程序集会起作用 - .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),任何修复通常都必须在两个地方推出,但这似乎是开始移动它们的最佳方式。

于 2009-05-28T20:02:17.350 回答