0

这让我发疯!我的服务器上有一个 asp.net 应用程序。它引用了两个 dll 文件,它们位于服务器上我的 GAC 中。我还在 GAC 文件夹中放置了 pdb 文件,以便我可以远程调试。

这是我的问题:当我调用以下命令时:

addToAbsenceList(e.Initials, a.StartDate, a.EndDate, a.Type.TypeId, vacationDays);

我可以看到 e.Initials 包含值“OFR”。当我按 F11 跳转到 addToAbsenceList 时:

addToAbsenceList(string initials, DateTime startDate, DateTime endDate, int AbsenceType, double duration)

变量 initials 现在包含值 NULL。

我刚刚纠正了这个问题(以前它总是发送 NULL - 现在它可以工作了),所以它似乎仍然从我以前的代码中获取信息。

我的 GAC 文件夹中只有一个版本的 dll。
我已确保我的 dll 文件夹中的版本是新版本(基于文件的日期)。
为了 100% 确定,我还将新的 dll 文件放在项目的 BIN 文件夹中。
使用 JetBrains 的 dotPeek 反编译 dll 文件时,我看到它包含我的更正。
我尝试从 IIS 重新启动我的 Web 应用程序
它在我的开发环境中工作。

所以不知何故,旧的 dll 文件似乎在我的 GAC 中仍然处于活动状态。我如何确保调用新的?最好不要重新启动生产服务器。

服务器:MS Windows 2008 R2 64-bit
开发:Windows 7 32-bit

4

2 回答 2

0

如果您在 GAC 中有 2 个与 web.config 相同的 dll 汇编,您可以指定哪个 dll 必须用作:

<configuration>
     <runtime>
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
               <dependentAssembly>
                     <assemblyIdentity name="YourClassLibrary" publicKeyToken="b035c4774706cc72" culture="neutral"/>
                     <bindingRedirect oldVersion= "1.0.1830.10493" newVersion= "1.1.1830.10461"/>
               </dependentAssembly>
          </assemblyBinding>
     </runtime>
</configuration>

newVersion中,您可以指定必须使用的版本。

于 2012-09-20T10:18:58.363 回答
0

相信我必须将我的评论“升级”为答案:

现在它起作用了!我尝试以管理员身份打开命令提示符。然后我将 dll 文件直接复制到 GAC 文件夹中。然后它起作用了。为什么它应该不同于以管理员模式打开 Windows 资源管理器并复制它,这对我来说是个谜。也因为我确实检查了日期/时间并且它们已正确更新。——</p>

于 2012-10-25T09:17:52.537 回答