2015-02-05 121 views
1

我正在使用Visual Studio Online进行回购和构建。这是我的TFS层次结构。Visual Studio Online构建失败依赖项目NuGet参考

  <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是我的通用代码解决方案,几乎包含在所有内容中)。

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

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

我不明白为什么。如果我在解决方案2上本地执行“msbuild build.proj”,那么它会成功清理并构建所有项目。

回答

1

我曾指出,我build.proj文件需要在这个例子中直接引用解决方案1:

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

这进而导致的MSBuild要经过NuGet包还原依赖项目。问题解决了。排序..

当我删除了所有本地代码并从回购库中执行了获取最新版本后,我意识到VS2013展现了我原来看到的行为。因此,我现在需要了解如何使用与用于从命令行执行的VSO和msbuild的Build.Proj文件相同的方式构建IDE。

相关问题