gpt4 book ai didi

c++ - 应用程序的 .exe 文件缺少 .NET TargetFramework,但仅在干净的构建中

转载 作者:太空狗 更新时间:2023-10-29 23:25:39 24 4
gpt4 key购买 nike

我有一个要从 VS2008 转换到 VS2012 的应用程序。该应用程序是混合模式,由多个项目组成。升级后,一旦输入托管代码,应用程序就会在运行时崩溃,但出现以下异常:

An unhandled exception of type 'System.TypeInitializationException' occurred in PresentationFramework.dll

Additional information: The type initializer for 'System.Windows.Application' threw an exception.

最深的内部异常是:

"String cannot be of zero length. Parameter name: frameworkName"

堆栈跟踪是:

at System.Runtime.Versioning.BinaryCompatibility.ParseFrameworkName(String frameworkName, String& identifier, Int32& version, String& profile)

at System.Runtime.Versioning.BinaryCompatibility.ParseTargetFrameworkMonikerIntoEnum(String targetFrameworkMoniker, TargetFrameworkId& targetFramework, Int32& targetFrameworkVersion)

at System.Runtime.Versioning.BinaryCompatibility.ReadTargetFrameworkId()

at System.Runtime.Versioning.BinaryCompatibility.get_AppWasBuiltForFramework()

at System.Runtime.Versioning.BinaryCompatibility..cctor()

这只会在干净构建之后发生,并且每次运行时都会发生,直到我清理单个项目然后再次构建。然后每次我运行它时它都会工作。

我用 JetBrains 查看了 .exe 文件,并比较了它们在应用程序运行时和崩溃时的样子。当应用程序崩溃时,此行位于 .exe 中:

[assembly: TargetFramework("", FrameworkDisplayName = ".NET Framework 4")]

显然框架字符串为空,这就是导致异常的原因。当应用程序运行时,该行不存在,因此也不异常(exception)。

为清楚起见进行编辑:当 .exe list 中完全没有上述行时,该应用程序可以正常工作。我已经确认在 VS2008 中,上述行不在 .exe list 中。看起来它根本不应该出现在 list 中,并且在 VS2012 的干净构建中它被添加并导致问题。另外,我没有使用 app.config 文件。

有办法解决这个问题吗?

最佳答案

我已经为此工作了 3 天,我刚刚找到了答案。

显然 MSBuild 会自动创建一个名为

.NETFramework,Version=v4.0.AssemblyAttributes.cpp

在你的

C:\Users\YOURNAME\AppData\Local\Temp

目录。它在创建 .exe 文件时使用此文件。

在我的机器上这个文件包含以下内容:

#using <mscorlib.dll>
[assembly: System::Runtime::Versioning::TargetFrameworkAttribute(L"", FrameworkDisplayName=L".NET Framework 4")];

空字符串导致了我的问题。我将文件更改为这样说:

#using <mscorlib.dll>
[assembly: System::Runtime::Versioning::TargetFrameworkAttribute(L".NETFramework,Version=v4.0", FrameworkDisplayName=L".NET Framework 4")];

现在一切正常!我不知道文件是如何进入那种状态的,但我从来没有碰过它。我不认为它在 VS2008 中使用。我对在我的构建中使用这样的文件感到有些恼火。

关于c++ - 应用程序的 .exe 文件缺少 .NET TargetFramework,但仅在干净的构建中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com