我有一个要从 VS2008 转换为 VS2012 的应用程序。该应用程序是混合模式,由多个项目组成。升级后,只要输入托管代码,应用程序就会在运行时崩溃,但出现以下异常:
PresentationFramework.dll 中出现“System.TypeInitializationException”类型的未处理异常
附加信息:“System.Windows.Application”的类型初始化程序引发了异常。
最深的内在例外是:
“字符串长度不能为零。参数名称:frameworkName”
堆栈跟踪是:
在 System.Runtime.Versioning.BinaryCompatibility.ParseFrameworkName(字符串 frameworkName、String& 标识符、Int32& 版本、String& 配置文件)
在 System.Runtime.Versioning.BinaryCompatibility.ParseTargetFrameworkMonikerIntoEnum(字符串 targetFrameworkMoniker,TargetFrameworkId& targetFramework,Int32& targetFrameworkVersion)
在 System.Runtime.Versioning.BinaryCompatibility.ReadTargetFrameworkId()
在 System.Runtime.Versioning.BinaryCompatibility.get_AppWasBuiltForFramework()
在 System.Runtime.Versioning.BinaryCompatibility..cctor()
这只发生在干净的构建之后,并且每次运行时都会发生,直到我清理一个项目然后再次构建。然后每次我运行它时它都会起作用。
我用 JetBrains 查看了 .exe 文件,并比较了它们在应用程序运行时和崩溃时的样子。当应用程序崩溃时,此行在 .exe 中:
[程序集:TargetFramework("", FrameworkDisplayName = ".NET Framework 4")]
显然框架字符串是空白的,这导致了异常。当应用程序工作时,该行不存在,所以也不例外。
为清晰而编辑:当 .exe 清单中完全没有上述行时,该应用程序可以工作。我已经确认在 VS2008 中,上述行不在 .exe 清单中。看起来它根本不应该在清单中,并且在 VS2012 中的干净构建中它被添加并导致问题。另外,我没有使用 app.config 文件。
有没有办法来解决这个问题?