2013年Visual Studio 2008项目解决方案

时间:2014-03-26 00:06:25

标签: c# visual-studio visual-studio-2008 visual-studio-2013

我有一个Visual Studio 2008项目是一个针对.NET 3.5 Compact Framework Windows CE设备的智能设备项目,它目前引用了一个3.5类库项目。

我想要做的是能够将类库添加到Visual Studio 2012/2013解决方案中,而无需"迁移"它

例如,结构目前是:

  • VS2008解决方案
    • 智能设备项目
    • 班级图书馆计划

我想要的是:

  • VS2008解决方案
    • 智能设备项目
    • 班级图书馆计划
  • VS2013解决方案
    • 班级图书馆计划
    • ASP.NET MVC项目

结果是我可以在VS2008中处理智能设备项目并将类添加到类库项目,然后能够打开VS2013解决方案文件并使这些新类可用。

当我看到2008 Class Project和2013 Class Project csproj文件之间的区别时,唯一真正不同的是Project元素上的ToolsVersion(http://msdn.microsoft.com/en-us/library/bcxfsh87.aspx)。 在VS2008中,ToolsVersion为3.5,但在VS2013中为12.0。

我尝试使用以下内容在ToolsVersion中为ClassLibraryProject切换3.5到12.0之间:

<Project ToolsVersion="$(ProjectToolsVersion)">
<Choose>
    <When Condition="'$(VisualStudioVersion)' != ''">
        <PropertyGroup>
            <ProjectToolsVersion>12.0</ProjectToolsVersion>
        </PropertyGroup>
    </When>
    <Otherwise>
        <PropertyGroup>
            <ProjectToolsVersion>3.5</ProjectToolsVersion>
        </PropertyGroup>
    </Otherwise>
</Choose>
<!-- other project stuff -->
</Project>

我可以在VS2013中打开这个,但是当我在VS2008中打开它时会说:

Unable to read the project file 'ClassLibraryProject.csproj'.
C:\Test\ClassLibraryPorject.csproj: The tools version "$(ProjectToolsVersion)" is unrecognized.

请注意:我无法将整个项目迁移到VS2013,因为VS2013不支持智能设备项目。

1 个答案:

答案 0 :(得分:1)

使用MSBuild 3.5的VS2008应该能够处理ToolsVersion 12,因为在这种情况下它会自动回退到ToolsVersion 3.5。

因此,您应该在VS2013中迁移类库项目,它应该能够在VS2008解决方案中仍然无需任何修改。

VS2008和MSBuild 3.5会给您错误,因为Choose的评估时间晚于Project,因此您在Choose(又名ProjectToolsVersion)中定义的内容不能用于Project