使用多个版本的Visual Studio

16

我想找到一种方法,在同一组项目中使用多个不同版本的Visual Studio。我们大部分团队成员使用2008版本,但我正在尝试2010版本。所有项目都是用C#编写的。

据我所知,Visual Studio 2010会坚持升级所有项目,因此不可能将所有解决方案/项目文件留在2008版本。我真的不想分支整个源代码树,所以我希望找到一种让多个版本的项目文件共存的方法。目前,我已经复制了所有的 .sln 和 .csproj 文件,这样就有:

# 2008 versions
SolutionName.sln
ProjectA.csproj
ProjectB.csproj

# 2010 versions
SolutionName.vs2010.sln
ProjectA.vs2010.csproj
ProjectB.vs2010.csproj
尽管所有2010版本的文件与它们的2008版本的文件具有相同的程序集名称,但Visual Studio(2010)认为这些项目都是“ProjectName.vs2010”。在VS中重命名该项目会失败,并显示一个消息,指出已存在同名文件。
我认为将2010版本放入子文件夹中不是解决方案,因为这会破坏文件中的任何相对路径。
所以:
- 有没有办法让VS相信项目名称不应该加上“ .vs2010 ”后缀(即不与文件同名)?或者 - 我的方法是否有误?在同一项目上使用多个VS的更好方法是什么?
更新:
我最初的说法是错误的,即Visual Studio无法找到项目引用,因为它正在使用文件名。我遇到的具体问题是,在我的构建文件中,项目引用的格式如下:
<ProjectReference Include="..\..\path\to\ProjectName.vs2010.csproj">
    <Project>{48354450-2462-449D-8B32-EFECA39F6CD7}</Project>
    <Name>ProjectName</Name>
</ProjectReference>

我复制的项目文件显然具有不同的ID(或者在<Project>元素中是不同的)。简单地从构建文件中删除该元素解决了这个特定问题:

<ProjectReference Include="..\..\path\to\ProjectName.vs2010.csproj">
    <Name>ProjectName</Name>
</ProjectReference>

话虽如此,复制项目和解决方案文件的整个过程实际上比它所值得的要花费更多的精力,因此我不建议采用这种方法。


项目名称以“.vs2010”后缀结尾会给您带来什么问题?项目名称不应对您产生任何影响。 - Damien_The_Unbeliever
抱歉,忘记了实际的问题...一些项目引用了其他项目,但是VS无法找到这些引用(即对ProjectName.vs2010的引用有效,但只对ProjectName的引用失败)。 - SimonC
但是项目引用保存在项目/解决方案文件中 - 这些文件已经为两个版本的VS维护了单独的版本。 - Damien_The_Unbeliever
你好。首先感谢这个问答。它确实帮助了我从vs2005过渡到vs2010。我有一个相关的问题:你在app.config文件中做了什么?在我的项目vs2005解决方案和项目使用.NET2,而转换为vs2010 .NET 4,在app.config文件中反映出来。你如何处理这些文件的2个版本? - Ivan
4个回答

3

您经常修改项目吗?

您可以简单地使用升级后的csproj和sln文件来工作。这样,您将提交/检入除项目文件外的所有源代码文件的更改,因为项目文件通常不会被修改(除了添加新文件)。

然后,如果您想提交项目文件中的更改,您需要使用一个中间的本地VS2008版本的文件,并使用您喜欢的差异/合并工具进行对齐,最终提交此VS2008版本。这将是一种本地分支。


这就是我一直在做的,但我想今天进行更改并在 VS 2008 中测试它。 - SimonC
我将此标记为答案,尽管它并没有直接回答问题(我在配置项目文件时犯了一个错误),但我认为这可能是更好的处理多个版本的VS的方式。 - SimonC

1
除非你必须使用不同版本的Visual Studio,否则那些仍在使用2008版的团队可以升级到Visual Studio 2010 Express。这个版本可免费商用,只缺少一些你可能不需要的高级功能。

0

你尝试过在简单的文本编辑器中打开SolutionName.vs2010.sln文件并更改项目的显示名称吗?

(格式:Project("{$GUID}") = "$DISPLAYNAME", "PROJECTFILE", "{$OTHERGUID}"

回答你问题的第二部分:

为什么重要的是掩盖项目文件有多个版本?现实情况是有两个版本,你必须小心维护它们,关注你的项目状态(添加/重命名/删除文件;更改配置选项)。

拥有两套项目和解决方案文件将导致它们之间存在差异,这会破坏事情。

通常情况下:不要在同一个项目中混合使用Visual Studio版本。保持开发人员之间的工具链相同将为您节省很多麻烦。


第一部分:是的,但是VS 2010会再次帮忙重命名它。 - SimonC
第二部分:我总体上同意。然而,这只是一个临时措施(我们最终都会升级),我只是试图节省去浏览大量项目以更改引用的工作。 - SimonC

0

Visual Studio 2010和2008项目文件(.csproj)可以同时兼容,只要您安装了两个编辑器,这意味着您可以升级它,在2010中进行工作,并让其他人在2008中工作而不会遇到任何问题。唯一的注意事项是您必须将目标框架保留为.NET 2.0或3.5,并且那些在2008中工作的人也必须安装2010。

唯一的问题是,如果他们尝试在2008中打开项目文件并且没有安装2010(因为我认为2010添加了一些新的构建目标,标准2008不知道),那么问题就出现了。我以前认为这不是问题,但上周(在一个Web项目上)我遇到了这个问题,所以对于某些项目来说,在某种程度上它确实存在。

如果您选择重命名路线,则最好的方法是在记事本中打开sln文件,手动将csproj引用重命名为新名称(添加任何新更名文件夹路径),然后在Visual Studio之外重命名任何文件夹,然后在Windows资源管理器中重命名文件名,然后在Windows资源管理器中重命名csproj文件,最后打开Visual Studio中的解决方案。然而,在那一点上,您的SCM绑定可能会出现问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接