Msbuild NuGet包还原不获取生成目标程序集(工具)

Msbuild NuGet包还原不获取生成目标程序集(工具),msbuild,continuous-integration,nuget,nuget-package,fody,Msbuild,Continuous Integration,Nuget,Nuget Package,Fody,我在解决方案中添加了两个项目。已在解决方案上启用包还原。但是,TFS生成服务生成失败,出现以下错误: WindowsUI.csproj(443):导入的项目 找不到“SolutionDir\Tools\Fody\Fody.targets”。确认 声明中的路径正确,并且文件存在 在磁盘上 文件夹确实不在那里。很明显,我可以把它检查到源代码管理中。但是,它是否应该由NuGet包Restore填充?还是我误解了NuGet Package Restore的功能?您遇到的问题与我尝试在NuGet Pack

我在解决方案中添加了两个项目。已在解决方案上启用包还原。但是,TFS生成服务生成失败,出现以下错误:

WindowsUI.csproj(443):导入的项目 找不到“SolutionDir\Tools\Fody\Fody.targets”。确认 声明中的路径正确,并且文件存在 在磁盘上


文件夹确实不在那里。很明显,我可以把它检查到源代码管理中。但是,它是否应该由NuGet包Restore填充?还是我误解了NuGet Package Restore的功能?

您遇到的问题与我尝试在NuGet Package中发布生成更新时遇到的问题相同。问题是在构建过程中调用了NuGet package restore。因此,如果NuGet package restore还原导入的.targets文件,则还原太迟。当文件写入磁盘时,
更新:这个答案现在只适用于1.13.0.0之前的版本

SolutionDir\Tools\Fody
中的文件无法通过nuget部署,需要从版本1.13.0.0(2013年3月23日发布)起检查到源代码管理中。Fody是一个100%nuget部署的工具,因此它将与包还原一起工作

这将在安装Fody Nuget时出现

我在试图获得基于Visual Studio Online的解决方案时遇到了类似的问题。 问题是在项目生成之前恢复包,但在此之前恢复项目 包中的文件和目标包含(仍需恢复)已被解释

使用构建前挂钩,如下所述:

在before.solutionname.sln.targets文件中,放置类似于以下内容的内容,以强制在构建第一个项目之前恢复所有包:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0"
     DefaultTargets="Build"
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<Target Name="BeforeBuild" BeforeTargets="Build">
 <Message Text="Restoring all nuget packages before build" Importance="high">
 </Message>
<Exec Command=".\.nuget\NuGet.exe restore YourSolution.sln" />
</Target>
</Project>

如果您有外部包源,请在您的nuget.config文件中配置它们,该文件应 也可以在.nuget文件夹中。例如:

<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <packageSources>
    <add key="NuGet official package source" value="https://nuget.org/api/v2/" />
    <add key="YourSource" value="http://yoursource.somewhere.net/nuget" />
  </packageSources>
  <packageRestore>
    <!-- Allow NuGet to download missing packages -->
    <add key="enabled" value="True" />

    <!-- Automatically check for missing packages during build in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>
</configuration>


好的,谢谢你的正式回答,Simon:)-由于该项目是多个解决方案的一部分,而且每个解决方案都需要
工具下的文件,所以在将此标记为答案之前,我将尝试Sayed的解决方案。@Mudu查看我对Sayeds answerThank的评论谢谢(不是我投了否决票),我会试试它是否适合我们的需要,而不是像西蒙建议的那样登记。我在询问之前尝试过(认为它指向了一个类似的方向)只签入
Fody.targets
,并重新排序构建步骤,但没有成功。谢谢,当ppl在没有评论的情况下进行向下投票时,这很令人沮丧:(很高兴知道不是你。@SayedIbrahimHashimi我投票否决了你。是的,我真的应该添加一条评论。对不起,我的不好。我投票否决了它,因为你的解决方案根本不起作用。所讨论的文件不作为nuget包的一部分存在,因此,任何恢复它们的尝试都不会起作用。基于这个问题,我假设Fody.targets是在一个NuGet软件包中,并且启用了OP的软件包还原,希望文件能够及时放置在服务器上以便导入。如果不是这样,那么您是对的,我的方法可能不起作用。我不熟悉正在使用的软件包。@SayedBrahimHashimi我使用
“$(SolutionDir)向我的项目添加了一个预构建事件.nuget\nuget“安装”$(ProjectDir)packages.config”-OutputDirectory“$(SolutionDir)packages”
以在生成之前还原包。我是否纠正了这一点?这也是解决您描述的问题的一种方法,当然不是很顺利?