Sup*_*est 3 c# clr filenotfoundexception visual-studio-2010 .net-assembly
我有一个解决方案,简而言之,它包含一个 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.dll和NewName.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 所建议的那样,旧的程序集名称仍然出现在序列化数据文件中,所以当我尝试从我的程序中加载它时,我遇到了一个异常,因为它找不到序列化文件中引用的程序集。
我想在你的程序中你使用standart .NET serialization. 请记住,在该种系列化的.NET节约型的信息了。完整的类型信息,带命名空间。这意味着如果您更改程序集名称并重新编译完整的类型名称将不匹配。
如果这不是你正在做的,请澄清。
| 归档时间: |
|
| 查看次数: |
3255 次 |
| 最近记录: |