【问题标题】:Is Platform Toolset v110 incompatible with .NET 3.5?Platform Toolset v110 是否与 .NET 3.5 不兼容?
【发布时间】:2014-02-18 23:28:04
【问题描述】:

这适用于 Visual Studio 2012 Ultimate Update 3。

我有一个面向 .NET 3.5 的 C# 项目。该项目使用 C++/CLI dll,该 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 之外,还有其他方法吗?

【问题讨论】:

    标签: c# .net visual-studio-2012 c++-cli


    【解决方案1】:

    一如既往,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>
    

    【讨论】:

    • 看起来我们将把我们的 C# 项目迁移到 .NET 4,并且 Toolset v110 似乎可以在 .NET 4 作为目标时正常工作(即使它不受官方支持)。为我解决了问题。
    猜你喜欢
    • 2012-06-10
    • 2010-09-10
    • 2021-03-24
    • 2017-02-12
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多