Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET:多个程序集版本,同一web应用程序_C#_.net_Asp.net_Vb.net_Legacy - Fatal编程技术网

C# ASP.NET:多个程序集版本,同一web应用程序

C# ASP.NET:多个程序集版本,同一web应用程序,c#,.net,asp.net,vb.net,legacy,C#,.net,Asp.net,Vb.net,Legacy,希望你的ASP.NET专业人士能够回答这个问题。我有一个单独的web应用程序,其中包含一个网站和一个web服务-两者都有几个共同的程序集引用(数据访问层、实用程序等)-但是,最近对web服务所做的更改将需要不同版本的公共程序集,而网站将无法使用这些版本(如果您想知道,该网站是一些旧的1.x.NET代码,在使用较新版本的程序集时会爆炸。) 有人能想出一种方法来允许我的web服务引用一个版本,并让我的网站引用另一个版本吗?显然,在bin文件夹中,我只能有一个同名的版本 谢谢 (顺便说一句——我刚刚意

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

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

谢谢


(顺便说一句——我刚刚意识到,我可能可以编译和引用具有不同名称的常见程序集,并将它们放在web应用程序的bin文件夹中——但这听起来真的很烦人……)

或者,您可以将web服务分离到与网站无关的新应用程序中。

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


我有一个单独的web应用程序,其中包含一个网站和一个web服务

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

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


我认为最好的办法是暂时将Web服务从Web应用程序中取出,并将它们作为两个独立的应用程序托管,直到您能够解决常见库的版本控制问题。

我不认为将较新的集合编译成具有不同名称的assmebly会起作用-.NET仍然会看到相同的名称空间-所以至少应该这样st您可能会出现“不明确引用”或“类型x已在dll y中声明”错误,或者在最坏的情况下,框架将加载与首先调用的应用程序部分相关的部分(website=>1.1,webservice=>2.0),并忽略另一个

您最好的选择是将应用程序重构为两个部分:web站点和web服务

在过去的几年里,我们一直在与我们的一个客户一起这样做——他们有一个基于ASP.NET 1.1的大型网站,但最近他们的独立项目已经开始迁移到2.0(3.5在后台,但显然仍然在2.0下托管)-我们基本上必须将通用代码移植到一组基于3.5构建的新库中,同时利用新的语言功能,并且在完成这些部分后,我们已将它们移动到新的网站(在IIS中)


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

如果他在站点中有一个依赖不同版本(具有不同功能)的ASMX和ASPX,这如何解决问题相同程序集的。我不认为这能解决我的特定问题,但知道这一点会很好-谢谢!是的…我可能会在IIS中创建另一个应用程序。该网站是几年前完成的,使用DNN的版本3。我花了几个小时试图找出新版本导致所有模块失败的原因-但运气不好(我似乎无法让DNN显示堆栈跟踪而不是“无法加载模块”-恶心)。同意。它们听起来像是一个应用程序中的两个,应该真正分开。
 <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>