我有一个Visual Studio 2008项目是一个针对.NET 3.5 Compact Framework Windows CE设备的智能设备项目,它目前引用了一个3.5类库项目。
我想要做的是能够将类库添加到Visual Studio 2012/2013解决方案中,而无需"迁移"它
例如,结构目前是:
我想要的是:
结果是我可以在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不支持智能设备项目。
答案 0 :(得分:1)
使用MSBuild 3.5的VS2008应该能够处理ToolsVersion 12,因为在这种情况下它会自动回退到ToolsVersion 3.5。
因此,您应该在VS2013中迁移类库项目,它应该能够在VS2008解决方案中仍然无需任何修改。
VS2008和MSBuild 3.5会给您错误,因为Choose
的评估时间晚于Project
,因此您在Choose
(又名ProjectToolsVersion
)中定义的内容不能用于Project
。