Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
Asp.net 当一个dll被引用,但bin文件夹中存在多个版本时,aspx编译器将使用哪个dll_Asp.net_Assemblies_Reference_Page Directives - Fatal编程技术网

Asp.net 当一个dll被引用,但bin文件夹中存在多个版本时,aspx编译器将使用哪个dll

Asp.net 当一个dll被引用,但bin文件夹中存在多个版本时,aspx编译器将使用哪个dll,asp.net,assemblies,reference,page-directives,Asp.net,Assemblies,Reference,Page Directives,我有一个ASP.NET Web应用程序,它引用了“C:\references\Utils.Varia.dll”。引用的另一个dll使用此dll的签名版本('C:\references\Utils.Varia.signed.dll') 现在在我的aspx中,我有以下导入指令: 此页面使用Utils.Varia.StringExtensions扩展类中的字符串扩展 但在运行时,我得到以下错误: 编译错误 描述:在执行过程中发生错误 所需资源的汇编 以满足此请求。请复习 以下是具体的错误详细信息 并

我有一个ASP.NET Web应用程序,它引用了“C:\references\Utils.Varia.dll”。引用的另一个dll使用此dll的签名版本('C:\references\Utils.Varia.signed.dll')

现在在我的aspx中,我有以下导入指令:

此页面使用Utils.Varia.StringExtensions扩展类中的字符串扩展

但在运行时,我得到以下错误:

编译错误

描述:在执行过程中发生错误 所需资源的汇编 以满足此请求。请复习 以下是具体的错误详细信息 并修改您的源代码 适当地

编译器错误消息:CS0121: 调用在 以下方法或属性: 'CONCENTRA.UTILS.StringExtensions.ToShortReadableString(字符串, int)“和 'CONCENTRA.UTILS.StringExtensions.ToShortReadableString(字符串, int)'

因此,我猜测编译器不知道是从有符号dll还是从常规dll获取扩展方法

这个假设正确吗?如果正确,我如何将它指向正确的dll

[编辑]
奇怪的是,这个编译器错误只发生在aspx文件中的代码上。如果我在codebehind中使用相同的函数,一切都会按预期工作。有人能解释一下吗


另外,我不能只引用已签名版本,因为实际上使用已签名版本是例外,所有其他组件都使用未签名版本(除1外)。

更改web应用以引用已签名版本。

看来您在应用中有意重起“DLL地狱”已经费了很大的劲,当默认情况下.NET使它很容易避免。为什么同一应用程序中引用了同一程序集的两个版本


您需要删除其中一个引用(很可能,它必须是已删除的未签名引用),并且只需使用其中的代码即可。或者更改另一个,使其代码不同。

我没有两次引用同一个dll。我正在使用未签名的版本,但另一个dll似乎正在使用同一dll的已签名版本。我没有说您两次引用同一dll。这样做不会给您带来任何麻烦-运行时会识别出它是同一个程序集。我说,“两个版本的”您可能没有打算-或意识到您是-但您引用的是同一程序集的两个不同版本。。。你刚才说你自己就在那儿似乎正在使用“同一DLL”的签名版本,不仅如此,您似乎有点不遗余力,因为您声明在应用程序中引用了特定的文件版本。首先,我不知道哪个引用正在使用签名的Utils.Varia.DLL,但当我清理解决方案时,它总是以某种方式将此dll的已签名和未签名版本复制到bin文件夹中。其次,在codebehind中,同样的扩展方法也可以很好地工作。这使我认为,可能还有另一个原因,为什么在编译时将签名版本放在bin文件夹中。很抱歉,我在问题中没有解释得更清楚。从您所说的,没有理由后面的代码不能正常工作。您知道,落后的代码在站点的主DLL中编译,而ASPX和其他页面在运行时由IIS/.NET编译,然后从预编译的DLL中运行,对吗?因此,DLL背后的代码没有对Utils.Varia.DLL的未签名版本的额外引用。这就是我所想的。您知道如何使用web.config中的页面指令或程序集将其指向正确的dll吗?这不是我的选项。