Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NuGet Package Restore does not fetch Build Target Assemblies (Tools)

I added Fody ProperyChanged to two projects in my solution. Package Restore is enabled on the solution. However, the TFS Build Service fails building with the following error:

WindowsUI.csproj (443): The imported project "SolutionDir\Tools\Fody\Fody.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.

The folder is indeed not there. I could check it into source control, obviously. However, should it not be populated by the NuGet Package Restore? Or am I misunderstanding what NuGet Package Restore does?

like image 725
Matthias Meid Avatar asked Feb 17 '23 21:02

Matthias Meid


2 Answers

I ran into a similar problem trying to get a solution to build on Visual Studio Online. Problem is that packages are restored before a project build, but before that the project files and target inclusions from packages (still to be restored) have already been interpreted.

Use the before build hook as described here:

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

In your before.solutionname.sln.targets file put something like this to force all packages to be restored before even the first project is built:

<?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>

If you have external package sources configure them in your nuget.config file which should also be in the .nuget folder. For example:

<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>
like image 76
Major Noob Avatar answered Feb 20 '23 10:02

Major Noob


As of version 1.13.0.0 (released March 23, 2013) Fody is a 100% nuget deployed tool and as such it will work with package restore.

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

This will appear when you install the Fody Nuget https://github.com/Fody/Fody/blob/master/NuGet/readme.txt

like image 31
Simon Avatar answered Feb 20 '23 09:02

Simon