NuGet

.NET CLI Errors Due to VSTS Package Source

At work, we use Visual Studio Team Services for source control, internal NuGet package management, and continuous integration. It has been a great tool that has really helped streamline our processes.

.NET CLI Issue

The problem with the setup is if the .NET CLI calls anything that uses NuGet (restore, installing new templates) with the VSTS package source enable it results in the following unauthorized error.

C:\Program Files\dotnet\sdk\2.1.103\NuGet.targets(104,5): error : Unable to load the service index for source https://company.pkgs.visualstudio.com/_packaging/feedname/nuget/v3/index.json. [project.csproj]
C:\Program Files\dotnet\sdk\2.1.103\NuGet.targets(104,5): error : Response status code does not indicate success: 401 (Unauthorized). [project.csproj]

I have been working around this by disabling the VSTS package source when working with the .NET CLI. It is a bit of a pain, but it works since I’m not using any of the packages from our private feed.

A Fix

I had the opportunity to talk to one of the VSTS product managers (PM) for the package management area and they are aware that this issue. While not the ultimate fix the PM pointed out that I could use a personal access token to get around the error.

Create a Personal Access Token

Log in to VSTS and hover over your profile picture and select security.

Next, click the add button on the Personal access tokens screen.

The next page you will need to enter a description for the token and select how long the token should be good for. It is also very important to change the Authorized Scopes off of all and only select the ones you want the token to be valid for. In my case, I selected everything package related, but Packaging (read) would be enough if you aren’t going adding packages to the feed.

At the bottom of the above screen click the Create Token button. This will take you back to the token list page with a new item for your new token and this will be your only opportunity to get a copy of the token.

Add NuGet Source with Token

Now that you have a token open up a command prompt and use the following command to add the NuGet source that will use your new personal access token.

nuget.exe sources add -name {your feed name} -source {your feed URL} -username {anything} -password {your token}

Wrapping Up

It turned out to be pretty easy fix this issue. Don’t be like me and just deal with it by disabling the package sources causing the problem. Just make sure that you don’t check-in your NuGet config file that contains your personal access token.

.NET CLI Errors Due to VSTS Package Source Read More »

NuGet Pack with IncludeReferencedProject in VSTS using BuildNumber Versioning

I recently needed to create a NuGet package from a project that had some dependencies on some other projects. Normally this isn’t a huge deal the following command would take care of it for you.

nuget pack pathToYourProject.csproj -IncludeReferencedProjects

The VSTS NuGet task with the pack command doesn’t currently provide to pass the include referenced projects flag. I had to jump through a few hoops to get this to work so I thought I would share.

The first step is to add the NuGet Tool Installer task, all the default settings work fine. Next, after the NuGet Tool Installer task add the Run Inline Powershell task. This task takes a bit more configuration. In the Script to run field enter the following.

Param(
  [string]$buildSourcesDirectory,
  [string]$buildArtifactStagingDirectory,
  [string]$buildBuildNumber
)

$version = $buildBuildNumber.Substring($buildBuildNumber.IndexOf("_") + 1)

Invoke-Expression "nuget pack 
                   $($buildSourcesDirectory)\yourProjectPath.csproj 
                   -NonInteractive 
                   -OutputDirectory $($buildArtifactStagingDirectory) 
                   -Properties Configuration=release -version $($version) 
                   -Verbosity Detailed 
                   -IncludeReferencedProjects"

Then in the Arguments field enter the following.

-buildSourcesDirectory $(Build.SourcesDirectory) 
-buildArtifactStagingDirectory $(Build.ArtifactStagingDirectory)
-buildBuildNumber $(Build.BuildNumber)

If it hadn’t been for the version above which is based the Build Number the custom command type of the NuGet task would have worked fine.

NuGet Pack with IncludeReferencedProject in VSTS using BuildNumber Versioning Read More »