Visual Studio Online Build在依赖项目NuGet引用上失败

时间:2015-02-05 16:06:39

标签: msbuild azure-devops

我正在使用Visual Studio Online进行回购和构建。这是我的TFS层次结构。

            <ClassLibraries>
                │
                ├───<Solution 1>
                │   └───Build.Proj
                │   └───.NuGet
                │       └───NuGet.exe
                │       └───NuGet.Config
                │       └───NuGet.Targets
                │   └───<Project 1>                 // Common Code
                │       └───Project1.csproj
                │   └───<Project 2>                 // Common Code Unit Test
                │       └───Project2.csproj
                │
                ├───<Solution 2>
                │   └───Build.Proj
                │   └───.NuGet
                │       └───NuGet.exe
                │       └───NuGet.Config
                │       └───NuGet.Targets
                │   └───<Project 3>
                │       └───Project1.csproj
                │   └───<Project 4>
                │       └───Project2.csproj

我有一个解决方案1的构建定义,它可以成功构建,根据需要恢复NuGet包而不会出现问题。

解决方案2.sln文件包含来自解决方案1的项目1作为依赖项,因为项目3和项目4都具有代码依赖性(解决方案1是我的公共代码解决方案,几乎包含在所有内容中)。 / p>

解决方案2的构建定义失败,因为它无法找到Project 1的NuGet依赖项。我想Build.Proj中的RestorePackages目标忽略了依赖项目。

              <Target Name="RestorePackages">
                <Exec Command="$(MSBuildThisFileDirectory).NuGet\NuGet.exe restore %(Solution.Identity)" />
              </Target>

我无法理解为什么。如果我执行&#34; msbuild build.proj&#34;在解决方案2上本地清理并成功构建所有项目。

1 个答案:

答案 0 :(得分:1)

我已经知道我的build.proj文件需要在此示例中直接引用解决方案1:

  <ItemGroup>
    <Solution Include="$(MSBuildThisFileDirectory)*.sln" /> 
    <Solution Include="$(MSBuildThisFileDirectory)..\Solution1\*.sln" />
  </ItemGroup>

然后,这会导致MSBuild通过相关项目的NuGet包还原。问题解决了。排序..

在我删除了所有本地代码并从回购中执行了Get Latest之后,我意识到VS2013展示了我最初看到的行为。所以我现在需要弄清楚如何使用与我用于VSO的Build.Proj文件相同的方式构建IDE,并从命令行执行msbuild。