奇怪的VS2008(devenv)Nant编译问题

时间:2013-09-12 20:52:02

标签: visual-studio-2008 compilation nant csproj devenv

这是后台,我们有一个解决方案文件(a.sln),其中包含2个项目(service.csproj& client.csproj)。还有另一个旧的解决方案文件(b.sln),其中包含3个项目(service.csproj,client.csproj& test.csproj)。我们也不使用此解决方案文件和测试项目。

我们使用NANT脚本进行编译。在NANT中,我们使用调用“devenv.com”的<exec> task来编译解决方案文件。我试图对构建脚本进行一些更改(在构建期间动态生成服务的代理),所以对此我是 试图单独编译service.csproj文件。我更新了NANT脚本,如下所示:

<exec program="${visualstudio.install.dir}\devenv.com" commandline="&quot;${base.dir}\Service.csproj&quot; /rebuild ${config}" failonerror="true" />

但是当执行上面的行时,它会编译(按以下顺序)

一个。 client.csproj 湾service.csproj C。 test.csproj

service.csproj没有对客户端和测试项目的任何项目引用。

我突然发现究竟发生了什么,以及客户/测试项目是如何编译的。

这是我发现的,我们有以下文件夹结构:

MyFolder -> 

    -> Service
        service.csproj
        b.sln
    -> Client
        client.csproj
    -> Test
        test.csproj
    a.sln

由于b.sln已过时且未使用,因此它位于MyFolder中 - &gt;服务文件夹(与service.csproj文件相同的文件夹)。 (开发人员在我的新公司中这么糟糕,他们不删除未使用的文件,只是将其重命名为_old。)

devnenv.com以某种方式从b.sln文件中获取项目文件并进行编译。我删除了b.sln文件,脚本编译service.csproj没有任何问题。但是当service.csproj和b.sln在同一个文件夹中时,visual studio(devenv.com)试图编译所有提到的3个项目该 解决方案文件

任何人都知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

这是我从微软那里得到的答案:

直接打开项目文件时,Visual Studio会应用一些启发式方法来尝试查找父解决方案文件。如果Visual Studio在项目的目录或父目录中找到具有匹配项目名称的解决方案文件,则Visual Studio将使用该解决方案。由于devenv / build试图直接从UI重现构建行为,因此仍然应用所有这些启发式方法。由于已失效的b.sln包含service.csproj,它正被启发式选取,在某些情况下可能会导致解决方案中的其他项目也被构建。

您可以通过两种方式解决此问题。要么从项目的文件夹树中删除已解散的解决方案,要么直接执行MSBuild来构建services.csproj。如果您传递。* proj文件,MSBuild不会应用任何解决方案启发式。