0

我有一个网站“项目”。它具有对我们不时更新的外部 DLL 的程序集引用(某种“框架”)。Visual Studio 2008 愉快地创建了“刷新”文件,用于在编译时更新引用。

我在外部程序集中添加了一个枚举并重新编译了它。回到网站项目,我更新了引用(通过右键单击“Bin”文件夹下列出的外部 DLL 并选择“更新引用”,然后进入网站的属性页和引用页,突出显示我的外部程序集并单击“更新”按钮。

网站的 App_Code 文件夹中有一个类,我使用来自外部程序集的新枚举值对其进行了一些更改。Intellisense 选择了新增功能,IDE 根本不会抱怨我使用它——直到我尝试构建解决方案。

在构建解决方案时,我收到错误 BC30456,它是“'{0}' 不是 {1} 的成员”错误。错误停留在“错误列表”视图和“输出”窗口中,直到我再次更新对外部程序集的引用,之后错误立即消失。

如果我从项目中完全删除引用,VS 正确地开始抱怨缺少枚举类型并警告找不到我试图导入的命名空间。当我重新添加程序集引用时,几秒钟后,所有错误和警告都消失了。在第一次尝试重建解决方案和/或网站时,我再次收到错误。

我试图通过执行以下任务来确认我没有发疯:

  1. 清理网站的 Temporary ASP.NET 文件夹,包括 32 位和 64 位版本的框架
  2. 手动将程序集从外部位置直接复制到 Bin 文件夹中
  3. 关闭和重新打开 Visual Studio
  4. 重新启动计算机

我现在刚刚注意到的一件事是外部 DLL 最后构建于 2011 年 11 月 14 日。当该版本的 DLL 位于 Bin 文件夹中时,Intellisense 是准确的。一旦我尝试构建,DLL 和 PDB 就会恢复到 2011 年 11 月 7 日的构建。我不知道这是从哪里来的。这台机器上该 DLL 的 DEBUG 和 RELEASE 版本都适用于 11/14。DLL 没有检入我们的源代码控制系统,只有 .refresh 文件被检入,因此它不能从源代码控制服务器更新它们。

我真的,真的,难住了,正在寻找你可能有的任何想法。

4

1 回答 1

0

当然,我在问完这个问题 5 分钟后就知道了……

该网站项目有另一个外部程序集引用 (B),它取决于我遇到的问题 (A)。在构建时,当它更新引用 B 时,它使用来自构建 B 的 bin 文件夹中的 DLL 覆盖来自 .refresh 文件中的位置的引用 A 的 DLL,这恰好是 11/7 构建。

更新参考 A 将正确的 DLL 复制到 Bin 文件夹中。更新参考 B 会在编译时覆盖它。

于 2011-11-15T17:33:59.780 回答