2014-02-18 64 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