我有一个网站“项目”。它具有对我们不时更新的外部 DLL 的程序集引用(某种“框架”)。Visual Studio 2008 愉快地创建了“刷新”文件,用于在编译时更新引用。
我在外部程序集中添加了一个枚举并重新编译了它。回到网站项目,我更新了引用(通过右键单击“Bin”文件夹下列出的外部 DLL 并选择“更新引用”,然后进入网站的属性页和引用页,突出显示我的外部程序集并单击“更新”按钮。
网站的 App_Code 文件夹中有一个类,我使用来自外部程序集的新枚举值对其进行了一些更改。Intellisense 选择了新增功能,IDE 根本不会抱怨我使用它——直到我尝试构建解决方案。
在构建解决方案时,我收到错误 BC30456,它是“'{0}' 不是 {1} 的成员”错误。错误停留在“错误列表”视图和“输出”窗口中,直到我再次更新对外部程序集的引用,之后错误立即消失。
如果我从项目中完全删除引用,VS 正确地开始抱怨缺少枚举类型并警告找不到我试图导入的命名空间。当我重新添加程序集引用时,几秒钟后,所有错误和警告都消失了。在第一次尝试重建解决方案和/或网站时,我再次收到错误。
我试图通过执行以下任务来确认我没有发疯:
- 清理网站的 Temporary ASP.NET 文件夹,包括 32 位和 64 位版本的框架
- 手动将程序集从外部位置直接复制到 Bin 文件夹中
- 关闭和重新打开 Visual Studio
- 重新启动计算机
我现在刚刚注意到的一件事是外部 DLL 最后构建于 2011 年 11 月 14 日。当该版本的 DLL 位于 Bin 文件夹中时,Intellisense 是准确的。一旦我尝试构建,DLL 和 PDB 就会恢复到 2011 年 11 月 7 日的构建。我不知道这是从哪里来的。这台机器上该 DLL 的 DEBUG 和 RELEASE 版本都适用于 11/14。DLL 没有检入我们的源代码控制系统,只有 .refresh 文件被检入,因此它不能从源代码控制服务器更新它们。
我真的,真的,难住了,正在寻找你可能有的任何想法。