In Azure DevOps you can have your own private NuGet feed and I’m using that extensively. But sometimes authentication there is a pain.
This time I run into authentication issue while executing dotnet publish
for a probject that used that private feed:
Unable to load the service index for source https://mycompany.pkgs.visualstudio.com/DefaultCollection/_packaging/MyFeed/nuget/v3/index.json. [D:\a\1\s\src\MyProject.csproj]
error : Response status code does not indicate success: 401 (Unauthorized). [D:\a\1\s\src\MyProject.csproj]
The reason for that is that dotnet publish
does restore by itself, even though all the packages have been restored previously via dotnet restore
.
The solution for this is to do the obvious thing: don’t restore on publish vis --no-restore
.
But that gave me more errors:
error NETSDK1047: Assets file 'D:\a\1\s\src\MyProject\obj\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v2.0/win-x64'. Ensure that restore has run and that you have included 'netcoreapp2.0' in the TargetFrameworks for your project. You may also need to include 'win-x64' in your project's RuntimeIdentifiers.
Solution for that was to add <RuntimeIdentifier>win-x64</RuntimeIdentifier>
in my csproj file.
The overall process goes like this:
dotnet restore MyProject.csproj --configfile D:\a\1\Nuget\tempNuGet_2089.config --verbosity Detailed
Where tempNuget
file is configured by Azure DevOps and contains the credentials for the private feed.
dotnet build MyProject.csproj
dotnet publish MyProject.csproj --configuration Release --output D:\a\1\a\MyProject -r win-x64 --no-restore
And my csproj file looks like this:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<StartupObject>MyProject.Program</StartupObject>
</PropertyGroup>