这是Visual Studio 2012 Ultimate Update 3。
我有一个针对.NET 3.5的C#项目。该项目使用C ++ / CLI dll,也是为.NET 3.5编译的。
我注意到如果使用Platform Toolset v110编译C ++ dll,那么虽然我可以将它添加到C#项目中,并且看到Intellisense中的类型,但编译器本身看不到任何类型。它抱怨它们不存在,我错过了一个程序集引用。如果使用Platform Toolset v90编译,则不会发生这种情况。
如果我然后将C#项目重新定位到.NET 4或4.5,那么它会看到类型正常。这些类型确实存在于程序集中,可以在object explorer或Ildasm中看到。
因此,使用Platform Toolset v110似乎无法使用.NET 3.5项目中的dll,即使dll是为.NET 3.5编译的。
这是正常和/或记录的行为吗?除了将C ++ / CLI项目降级到Platform Toolset v90或将C#项目升级到.NET 4之外,还有其他方法吗?
答案 0 :(得分:2)
一如既往,Toolset v110不支持4.5以外的任何.Net版本。正式地,要更改目标框架must change the platform toolset to a version that supports the target .Net version (例如,Windows 7 SDK for .net 2.0-3.5 SP1)。这涉及更改项目文件中的TargetFrameworkVersion以及切换到另一个平台工具集。
也就是说,工具集只是一堆msbuild规则,因此您可以让编译器通过changing the vcxproj and global msbuild rules重新定位.Net版本 在项目文件中。来自VC ++团队的Olga Arkhipova提出了这个问题:
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<RealTargetFrameworkVersion>$(TargetFrameworkVersion)
</RealTargetFrameworkVersion>
将文件添加到'C:\ Program Files(x86)\ MSBuild \ 4.0 \ Microsoft.Common.Targets \ ImportBefore
<Project ToolsVersion="4.0"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetFrameworkVersion
Condition="'$(RealTargetFrameworkVersion)' != ''">
$(RealTargetFrameworkVersion)
</TargetFrameworkVersion>
</PropertyGroup>
</Project>