移动VC++;从.NET4.0到4.5的项目?

移动VC++;从.NET4.0到4.5的项目?,.net,visual-c++,visual-studio-2012,.net,Visual C++,Visual Studio 2012,我正在尝试将我的VC++项目从.NET4.0迁移到4.5。我正在使用Visual Studio 2012 使用在线指南,我认为唯一需要做的更改是编辑.vcxproj文件,为TargetFrameworkVersion添加这一行: <Project ...> <PropertyGroup Label="Globals"> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

我正在尝试将我的VC++项目从.NET4.0迁移到4.5。我正在使用Visual Studio 2012

使用在线指南,我认为唯一需要做的更改是编辑.vcxproj文件,为TargetFrameworkVersion添加这一行:

<Project ...>
    <PropertyGroup Label="Globals">
        <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 
    </PropertyGroup>
</Project>

v4.5
进行此更改后,properties inspector现在将目标框架版本正确地列为4.5。但是,当我尝试在我的C#.NET 4.5应用程序中加载VC++程序集时,我得到了一个BadImageFormatException

<Project ...>
    <PropertyGroup Label="Globals">
        <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 
    </PropertyGroup>
</Project>


是什么导致了这种异常?我是否错过了将VC++项目移至NET 4.5的其他步骤?

右键单击您的解决方案。。。转到属性。。。。单击构建。。。检查你的平台目标。。。确保它与项目中的每个解决方案都匹配

如果您的项目具有不同的平台目标,则会引发此异常

如果平台目标设置为x86,请确保每个解决方案中的所有目标都设置为x86


如果平台目标设置为x64,请确保每个解决方案中的所有目标都设置为x64。

这很可能与.NET framework版本无关--您不会因为不匹配而获得
BadImageFormatException
。NET 4.5可以加载早期的.NET framework程序集

更可能的情况是,您的C#应用程序运行的是x86,但您将C++/CLI项目编译为x64,反之亦然。检查您正在构建的项目是否匹配


请注意,C#的默认位在VisualStudio2010中已更改;因此,如果您正在转换一个早于此的项目,您可能已经为您的C#应用程序打开了
,这将导致它以x86格式运行,即使在x64计算机上也是如此。请注意,不可能创建一个AnyCPU C++/CLI应用程序(假设您没有使用
/clr:pure
),因此,如果您的C++应用程序依赖于C++/CLI组件,那么最好使用相同的位来标记C++应用程序,而不是使用AnyCPU。

刚刚检查过,所有这些应用程序都是针对.NET 4.5的。。。。检查
构建
部分中的
平台目标
。您正在查看
应用程序
部分中的
目标框架
,这是不正确的。检查我的编辑我的C#项目针对的是任何CPU,而VC++项目针对的是x64。我正在64位机器上构建和运行。在我将所有项目切换到.NET 4.5之前,此设置一直有效。在您的VC++项目中,请确保所有解决方案都以x64为目标。编译器的性能不好,如果它们不是都设置为同一个目标,我的解决方案是100+C项目,VC++项目是整个解决方案中唯一的VC++项目。我将我的C标记为任何CPU,VC++项目设置为x64。在我从4.0迁移到4.5.NETFramework之前,这个设置一直在运行。我正在64位机器上构建和运行。我如何检查C#可执行文件是否以64位运行以确认您的理论?检查caproj中的“Prefer32Bit”以确认它们都没有Prefer32Bit标志。@StickFigs:看起来他们将其更改为默认值:@StickFigs:您不应该将程序构建为依赖于非AnyCPU组件的AnyCPU。