2014-02-18 42 views
0

这是与Visual Studio 2012旗舰版更新3.Platform Toolset v110是否与.NET 3.5不兼容?

我有一个C#项目,目标.NET 3.5。这个项目使用C++/CLI DLL,它也是为.NET 3.5编译的。

我注意到如果C++ dll是用Platform Toolset v110编译的,那么虽然我可以将它添加到C#项目中,并且在Intellisense中查看类型,但是编译器本身并没有看到任何类型。它抱怨说它们不存在,我缺少一个程序集引用。如果使用Platform Toolset v90进行编译,则不会发生这种情况。

如果我然后将C#项目重新定位到.NET 4或4.5,那么它会看到类型正常。类型确实存在于程序集中,可以在对象资源管理器或Ildasm中看到。

因此,似乎使用Platform Toolset v110使得无法使用.NET 3.5项目中的dll,即使dll是为.NET 3.5编译的。

这是正常和/或记录的行为?除了将C++/CLI项目降级到Platform Toolset v90或将C#项目升级到.NET 4之外,有没有其他解决方法?

回答

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++团队奥尔加·阿尔希波娃配备了这样的:

<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> 
+0

外貌就像我们将C#项目移动到.NET 4一样,Toolset v110似乎可以很好地与.NET 4一起作为目标(即使它没有官方支持)。问题解决了我。 – Asik