NuGet包还原无法获取构建目标程序集(工具)

时间:2013-01-14 13:05:08

标签: msbuild continuous-integration nuget nuget-package fody

我在我的解决方案中为两个项目添加了Fody ProperyChanged。已在解决方案上启用程序包还原。但是,TFS构建服务无法构建,并出现以下错误:

  

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

该文件夹确实不存在。显然,我可以将其检查为源代码控制。但是,它是否应该由NuGet Package Restore填充?或者我误解了NuGet Package Restore的功能?

4 个答案:

答案 0 :(得分:3)

我遇到了类似的问题,试图在Visual Studio Online上构建解决方案。 问题是在项目构建之前还是在项目之前恢复了包 包中的文件和目标包含(仍有待恢复)已被解释。

使用before build hook,如下所述:

http://sedodream.com/2010/10/22/MSBuildExtendingTheSolutionBuild.aspx

在你的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>

答案 1 :(得分:2)

更新:此答案现在仅适用于1.13.0.0之前的版本。

SolutionDir\Tools\Fody中的文件无法通过nuget部署,需要检入源代码管理

答案 2 :(得分:2)

从1.13.0.0版(2013年3月23日发布)开始,Fody是一个100%的nuget部署工具,因此它可以用于包恢复。

https://nuget.org/packages/Fody/

安装Fody Nuget时会出现这种情况 https://github.com/Fody/Fody/blob/master/NuGet/readme.txt

答案 3 :(得分:1)

当我尝试在NuGet包中发布构建更新时,您遇到了同样的问题。问题是在构建过程中调用NuGet包还原。因此,如果NuGet包还原还原了导入的.targets文件,则恢复得太晚。到文件写入磁盘时,由于文件不在磁盘上,<Import元素已被评估并跳过。

我发现的最好的事情是构建另一个项目来为您调用包恢复。为了在安装NuGet包时为我自己的SlowCheetah NuGet包平滑这一点,我在与.csproj / .vbproj相同的导向器中创建一个packageRestore.proj文件。然后用户可以构建此项目文件,然后构建.sln / .csproj / .vbproj。通过执行此操作,将恢复NuGet包,然后启动构建过程。

如果您对使用我的packageRestore.proj感兴趣,我可以将SlowCheetah NuGet包的那部分重新考虑到它自己的部分,你的NuGet包可以依赖于那个。如果您对此感兴趣,请告诉我。