SeeNoWeevil
SeeNoWeevil

Reputation: 2619

TeamCity - MSBuild unable to locate NuGet references

Attempting to build a C# project which has numerous references to assemblies in NuGet packages fails in TeamCity but works fine in Visual Studio.

Found in the log;

For SearchPath "{HintPathFromItem}".

[13:48:15][ResolveAssemblyReference]         
Considered "..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll", but it didn't exist.

The reference in the project file is;

<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>

Any ideas? It seems like it's not starting from the correct directory so can't resolve "../packages" which exists one level above the .csproj file.

Upvotes: 14

Views: 10022

Answers (8)

Christian Buonaiuto
Christian Buonaiuto

Reputation: 21

I had a similar problem: When I ran the "dotnet restore" command and tried to compile the project with msbuild I got the same error present in this thread. My solution was to replace the "dotnet restore -f" command with "nuget restore"

PS: The path for nuget command in Mac is: /Library/Frameworks/Mono.framework/Versions/Current/Commands/nuget

Upvotes: 0

CJBS
CJBS

Reputation: 15695

Ensure that the .dll and .pdb files are included in source control (or have been downloaded).

For TFS (not TeamCity), by default, .pdb files and .dll files are excluded. So double-check that all files for each package sub-directory have been included, not just the nuget .xml file.

Background: I came to this question with the same thought as some other posters - that the relative reference in the .csproj file might be incorrect. After using a path in the .csproj file to ensure that the reference was absolute with regards to the project... <HintPath>$(MSBuildProjectDirectory)\..\.nuget\packages\Common.Logging.Core.3.0.0\lib\net40\Common.Logging.Core.dll</HintPath> ..only to get the same error, I double-checked that the required files existed. I also did an MSBuild build on my local machine (as opposed to Visual Studio build), and it worked. Further investigation on the build server revealed that the specified files did not exist, even though the directory, and .nuget package .xml files did.

Upvotes: -1

code4life
code4life

Reputation: 15794

Sorry for resurrecting this old post, but in addition to the above excellent points (Tjaart, SeeNoWeevil, Luke), you might also want to check the property CopyLocal=true for the references that you nuget'ed down.

For myself, this has often been the one tiny oversight that leads to exactly the error that the OP was mentioning.

Upvotes: 0

Tjaart
Tjaart

Reputation: 4129

I know this has been answered, but maybe someone else has had the same problem I did.

My hint paths in my project file were incorrectly pointing to packages and changing it to ..packages fixed it for me.

So changing it from this:

<Reference Include="Newtonsoft.Json">
  <HintPath>packages\Newtonsoft.Json.5.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

To this:

<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.5.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

Fixed it.

Upvotes: 11

slolife
slolife

Reputation: 19870

My understanding at this point is based on the information here: http://youtrack.jetbrains.com/issue/TW-20525

But I am just diving into both TeamCity and NuGet at the same time (coming from CruiseControl.NET)

So what I did for the time being is to add a "NuGet Installer" build step before my vs.net solution build step and everything worked great.

Upvotes: 1

SeeNoWeevil
SeeNoWeevil

Reputation: 2619

I had restructured my projects since installing the NuGet packages so even though '../packages' was correct for the main project, it wasn't for the other projects which had been moved.

Uninstalling and re-installing the NuGet packages writes the paths correctly or more straightforward, doing a find and replace on the paths in each .csproj file.

Upvotes: 6

msigman
msigman

Reputation: 4524

You can highlight the file in Solution Explorer and got to Properties, and verify that Copy to Output Directory is set to True

Upvotes: -1

undefined
undefined

Reputation: 34309

You either need to add the packages directory to source control or enable nuget to automatically download packages (its a feature in the right click menu of nuget 1.6)

See http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Upvotes: 0

Related Questions