我正在使用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上本地清理并成功构建所有项目。
答案 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。