Why are C# references added differently between NuGet and Visual Studio

Viewed 1975

We use NuGet (NuGet Version: 3.5.0.1996) two different ways. Either we run it from the command line or we use the NuGet Package Manager in Visual Studio (2015).

The problem is that these two ways add references to the .csproj file with different formats. If we use the command line, we get a reference that looks like this:

<Reference Include="Dummy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
  <HintPath>..\packages\Dummy.1.27.10\lib\net452\Dummy.dll</HintPath>
  <Private>True</Private>
</Reference>

If we use the NuGet Package Manager in Visual Studio, we get a reference that looks like this:

<Reference Include="Dummy, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
  <HintPath>..\packages\Dummy.1.27.10\lib\net452\Dummy.dll</HintPath>
  <Private>True</Private>
</Reference>

Notice that ones adds the reference with the PublicKeyToken attribute and the other adds it with the processorArchitecture attribute.

This causes issues with our source control with frequent (and unnecessary) updates and merges.

It would be nice to know why this happens, but I would much rather have a way to prevent it from happening. Any suggestions?

2 Answers

Starting with Visual Studio 2015, Nuget comes embedded and you cannot change the version used. I don't have a VS 2015 at hand to check, but most likely it is using a version different than the one you have in the command line.

Nuget has "suffered" (or enjoyed) a lot of changes and I think this is just a manifestation on how two different versions of nuget handles package references.

My suggestion, to avoid having issues with source control, is to standardize one way of using Nuget and stick to it. My suggestion would be to use it inside Visual Studio, either by means of Package Manager Console (similar to the CLI) or though the visual interface.

Related