我被要求更新其他人创建的ASP.NET应用程序正在使用的类库DLL。但是,当我查看ASP.NET应用程序的文件夹结构时,我发现DLL存在于两个不同的文件夹下,看起来应用程序在您第一次运行时使用一个DLL,而另一个在重新启动IIS后使用。我计划进行修复,以便DLL只在应用程序中存在一次,但我想先了解发生了什么。
这是交易 - DLL被称为MyLib.DLL,它存在于BIN子文件夹和名为MyLibrary的文件夹中。以下是应用程序中的ASPX页面如何调用类库中的方法的示例:
Dim oMyClass As New MyLib.MyClass
Dim sTemp As String = oMyClass.GetVersion()
该应用程序在web.config文件中也包含此部分:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MyLib" culture="neutral"/>
<codeBase version="1.0.0.0" href="MyLibrary/MyLib.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
由于应用程序有两个不同的MyLib.DLL副本,我更新了两个并且GetVersion函数返回不同的结果,因此我可以判断正在使用哪个DLL。当我第一次运行应用程序时,我可以看到ASP.NET正在“Temporary ASP.NET Files”文件夹下创建一个文件夹,它会复制MyLib.DLL的BIN版本。当调用GetVersion函数时,应用程序将返回“From BIN文件夹”。但是,如果我重新启动IIS并再次运行应用程序,GetVersion将开始返回“从MyLibrary文件夹”,表示它现在正在使用MyLibrary文件夹中的DLL而不是BIN文件夹。
那么,为什么ASP.NET首先使用DLL的BIN版本,然后在重启IIS后使用Codebase设置中指定的版本?如果我想摆脱DLL的BIN版本,我如何配置应用程序只使用MyLibrary文件夹中的副本?我试图摆脱BIN版本,但随后应用程序给了我一个错误,无法找到程序集。
谢谢 - 我是ASP.NET的新手,所以我希望这个问题有道理。
答案 0 :(得分:0)
您是否尝试过删除指向MyLibrary目录的dependentAssembly调用?就个人而言,我认为使用bin目录更有意义,因为它是标准做法,不需要额外的配置。