VS2010重命名后无法找到程序集

时间:2012-04-07 13:17:08

标签: c# visual-studio-2010 clr .net-assembly filenotfoundexception

我有一个解决方案,简单地说,它包含一个Windows窗体应用程序项目和一个类库,都在C#中。我的图书馆项目名为OldName。因此,命名空间也是OldName,生成的文件是OldName.dll

我想更改名称,因此我进入了属性,并将大会名称从OldName更改为NewName

立即生成NewName.dll。但是,当我的应用程序尝试访问此dll时,我得到一个System.Runtime.Serialization.SerializationException(dll包含我的二进制序列化某些东西的方法):它声称Unable to find assembly 'OldName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Procmon.exe确认它正在查找对于旧的dll(NAME NOT FOUND)。

现在奇怪的是,如果我复制NewName.dll并将其重命名为OldName.dll,那么我有OldName.dllNewName.dll,则问题仍然存在。如果我删除NewName.dll并且只离开OldName.dll,程序会在启动时崩溃:System.IO.FileNotFoundException: Could not load file or assembly 'NewName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.这次,Procmon.exe报告CreateFileMapping操作失败OldName.dll因为FILE LOCKED WITH ONLY READERS,但它似乎在NewName.dll上得到了同样的东西。

将程序集名称更改回OldName会修复所有内容,但当然文件名将变为OldName,我不希望这样。

我不能为我的生活找出它引用旧程序集名称的其他地方。我能错过什么?

解决方案:我的程序允许用户创建一个文件,然后使用我的dll中的方法使用序列化将其保存到磁盘。它还允许加载文件。懒惰,我曾经做过一次测试文件,并不断重复使用它。事实证明,正如@Tigran建议的那样,旧的程序集名称仍然出现在序列化数据文件中,所以当我尝试从程序中加载它时,我得到一个例外,因为它无法在序列化中找到引用的程序集文件

1 个答案:

答案 0 :(得分:4)

假设您在程序中使用standart .NET serialization。请记住,在类序列化.NET也会保存类型信息。带名称空间的完整类型信息。这意味着如果您更改程序集名称并重新编译完整类型名称将导致不匹配。

如果这不是您正在做的事情,请澄清。