什么原因导致Visual Studio无法正确加载程序集?

4
我一直在愉快地编写一个相当大的解决方案(超过13k行代码,5个项目),它使用Linq to Sql进行数据访问。突然间我执行了一个正常的构建,结果收到了一个甜蜜而模糊的错误消息:
“错误1:由于C:\xxx\xxx.dbml中存在验证错误,构建失败。打开文件并解决错误列表中的问题,然后尝试重新构建项目。C:\xxx\xxx.dbml”
我几周没有触及我的数据访问层,并且DBML文件也没有进行任何调整。我尝试了很多愚蠢的技巧,例如重新创建布局文件,在重启Visual Studio后将现有文件复制并重新添加到项目中(以防文件级别的损坏);但是都没有成功。
我忘记佩戴我的Visual Studio技能+5护身符,所以我开始四处搜索,唯一有道理的答案是重置我的程序包,因为Visual Studio无法正确加载一个程序集。运行“devenv.exe /resetskippkgs”之后,我实际上可以将dbml文件添加回DAL项目并重建解决方案。
我很高兴它已经被修复,但我更想从这个经历中获得更深入的理解。有人知道为什么在Visual Studio 2008中会发生这种情况吗?
新编辑:10/30/2008 这不只是我一个人遇到的问题。 Rich Strahl最近在他的“网络日志”上写到了同样的经历。他链接到另一个博客出现相同问题并使用相同操作
自原帖发布以来,我已经遇到了几次这个问题,这让我认为这不是一个随机问题。如果有人找到了明确的答案,请发帖。
4个回答

2
安装了Visual Studio 2008的Phalanger后,我尝试创建一个新的PHP WinForms应用程序。但是项目创建失败,并显示了类似的错误信息,指出无法加载所需的DLL(Failed to load file or assembly...)。在Visual Studio 2008命令提示符中运行devenv.exe /resetskippkgs命令立即解决了这个问题。
谢谢提供信息。

是的。最近我在网上到处都看到这个问题。问题是我还没有听到一个具体的原因,解释为什么或者如何会发生在.dbml文件中。可能是因为微软未来不会像我们所知道的那样支持LinqToSql。 - Ian Patrick Hughes

2
当我尝试在第二个解决方案(安装程序)中编译数据访问层时,也会出现此错误。我的做法是在dbml文件上运行Custom Tool,这样就可以解决问题了。
实际上,dbml文件中没有需要更正的错误。
我认为问题在于Visual Studio缓存了dbml文件的已编译版本,并且该缓存对其他解决方案无效。我猜想运行/resetskippkgs与重新编译dbml文件的效果相同。
无论如何,目前还没有解决此问题的方法吗?

我在VS 2010中还没有遇到过这种情况,所以可能已经修复了,而向后支持就不会发生了。 - Ian Patrick Hughes

1
我在VS 2010中遇到了同样的问题(由于dbml文件中的验证错误而构建失败)。我通过查看dbml文件的设计视图并将表稍微拖动到不同位置以刷新dbml布局等文件来解决了这个问题。这似乎起到了作用,但是这是一个有点奇怪的问题。

1
说实话,我有过几个这样的情况,其中文件“似乎变得疯狂”...然而,经过调查,似乎文件在某种程度上发生了改变(例如,有时可以通过意外更改某个看似无关的属性来对文件进行更改)。
我认为可能会有太多可能引起这种问题的原因,而且基于问题已经得到解决的事实,似乎找不到答案。

1
谢谢您的回复。非常有道理,除了快速使用错误消息的各个部分进行谷歌搜索之外,所有遇到我遇到的问题的人都在使用LinqToSQL。这让我认为它不仅仅是一个奇怪的孤立问题。此外,如果它是VS中真正出现的问题,它可能不会出现在MSDN上(尽管微软不像苹果那样删除线程)。如果在短时间内未收到答案,我将关闭它。 - Ian Patrick Hughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接