2014-06-27 139 views
6

我正在使用Silverlight应用程序。我们正在使用nuget软件包,但我们不检查软件包,软件包应在建设时恢复。该解决方案在Visual Studio中编译良好。 我想使用的MSBuild在命令行中添加编译任务从命令行使用msbuild时缺少nuget包错误

Exec的{C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ msbuild.exe $ slnFile/p:OutputPath = $ outputPath /电话号码:配置=释放/ p:SolutionDir = $ ROOTDIR \来源\ /冗长:最小/ NOLOGO/M:4}“构建失败

在做这一步之前,我在做的NuGet明确恢复

Exec {C:\ project \ nuget.exe restore $ solutionFile}“还原失败”

此步骤传递一个消息“packages.config中列出的所有软件包”已经安装。

但是当实际生成步骤发生构建失败消息

该项目引用缺少此计算机上的NuGet包(一个或多个)。启用NuGet软件包还原以下载它们。有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是\ Source \ .nuget \ NuGet.targets。

我做一个明确的NuGet恢复,我已经启用

“允许的NuGet下载缺失的软件包”在Visual Studio和 在解决方案级别“启用NuGet包还原”。

我nuget.config有“disableSourceControlIntegration”值=“真”

我已经看到了计算器类似的问题,我已经尝试了所有被认为上述解决方案。尽管有这些,但我不知道为什么它会失败。

+0

对于S&G,请将您的nuget.targets文件复制到\ Source – Will

+0

@的根目录下,谢谢输入。我将.nuget文件夹复制到它帮助的根目录。 – sasikt

+0

你可以[编辑]并添加完整的nuget.config文件吗?应该可以[this](https://gist.github.com/WillSullivan/37025f2af4908a74f267) – Will

回答

2

您不需要同时执行nuget.exe恢复并让MSBuild使用NuGet.targets来恢复NuGet包。你应该选择一个或另一个。

我怀疑你的情况的问题是,$ ROOTDIR没有定义,并且要传递到的MSBuild的SolutionDir属性是:

\来源

在我的项目文件我有:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" /> 

所以,如果SolutionDir is \ Source then the solution will fail to compile with the same error message。

2

在矿山,文件的csproj不知何故有此:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 
<PropertyGroup> 
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 
</PropertyGroup> 
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" /> 

删除它解决了这个问题。

+0

我也遇到同样的问题,通过命令行nuget命令恢复包(nuget restore“D:\ ..” )当我使用MSbuild从命令行编译项目时没有被引用。它是如何得到解决的? – user1925406