Hello Rickard,
This is PG-1212 and will be fixed in ProGet 5.0.9.
Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.
If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!
Hello Rickard,
This is PG-1212 and will be fixed in ProGet 5.0.9.
Hello Leandro,
Feeds_GetLicenseUrls hasn't existed since 4.7.0. It's possible that the error you encountered was from a custom extension which is not compatible with 5.0.
ProGet 5.0 uses the Inedo.SDK NuGet package instead of the Inedo.ProGet.SDK NuGet package, and loads extensions that end in .inedox instead of .progetx.
Hello Phil,
This appears to be a bug where NuGet packages with no stable versions keep their first-uploaded version as the "latest". I've filed PG-1201 with a fix.
As a workaround, uploading a version of the package with a version number that does not include a hyphen (with a lower version number than the actual latest version of the package) will make the latest version update correctly.
I have tracked down the root cause of this issue. NuGet feeds (but not NuGet (quirks) feeds) in ProGet 5 generate a list of symbols, but never actually put them in the database.
The fix is filed as PG-1195 and will be coming in the next version of ProGet 5. It includes a button in the feed management page to re-index all symbols in a feed, and packages affected by this bug have a message with a link to the feed management page in the place where the list of symbol files would normally be.
Hello Matt,
Is Web.BaseUrl set to https://host.name.net in https://host.name.net/administration/advanced-settings? Is there a reverse proxy between ProGet and the internet that requires authentication, or that might be modifying authentication headers?
If you access the /v2/ URL in your browser, there should be a header like WWW-Authenticate: Bearer realm="https://host.name.net/v2/_auth",service="host.name.net".
EDIT: We have updated our Docker documentation to include this information and more information about setting up your Docker client and ProGet server.
Hello Clint,
This SQL will copy any credentials that BuildMaster has but Otter doesn't to Otter. However, it will not work if BuildMaster and Otter use different encryption keys. You can find the encryption keys for BuildMaster and Otter in app_appSettings.config and in web_appSettings.config. The key will look like this in the file: <add key="Persistence.EncryptionKey" value="[encryption key is here]" />
INSERT INTO [Otter].[dbo].[Credentials] ([Environment_Id], [Credential_Name], [CredentialType_Name], [LegacyConfiguration_Bytes], [Configuration_Xml], [AllowFunctionAccess_Indicator])
-- Omit the line above this comment to test this before running it for real
SELECT OE.[Environment_Id]
,BC.[Credential_Name]
,BC.[CredentialType_Name]
,[LegacyConfiguration_Bytes] = NULL
,[Configuration_Xml] = CAST(REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
CAST(BC.[Configuration_Xml] AS VARCHAR(MAX)),
'<Inedo.BuildMaster.Extensibility.Credentials.BuildMasterCredentials Assembly="BuildMasterCore">',
'<Inedo.Otter.Extensions.Credentials.BuildMasterCredentials Assembly="OtterCore">'
),
'<Inedo.BuildMaster.Extensibility.Credentials.OtterCredentials Assembly="BuildMasterCore">',
'<Inedo.Otter.Extensions.Credentials.OtterCredentials Assembly="OtterCore">'
),
'<Inedo.BuildMaster.Extensibility.Credentials.ProGetCredentials Assembly="BuildMasterCore">',
'<Inedo.Otter.Extensions.Credentials.ProGetCredentials Assembly="OtterCore">'
),
'<Inedo.BuildMaster.Extensibility.Credentials.PrivateKeyCredentials Assembly="BuildMasterCore">',
'<Inedo.Otter.Extensions.Credentials.PrivateKeyCredentials Assembly="OtterCore">'
),
'<Inedo.BuildMaster.Extensibility.Credentials.UsernamePasswordCredentials Assembly="BuildMasterCore">',
'<Inedo.Otter.Extensions.Credentials.UsernamePasswordCredentials Assembly="OtterCore">'
),
'</Inedo.BuildMaster.Extensibility.Credentials.BuildMasterCredentials>',
'</Inedo.Otter.Extensions.Credentials.BuildMasterCredentials>'
),
'</Inedo.BuildMaster.Extensibility.Credentials.OtterCredentials>',
'</Inedo.Otter.Extensions.Credentials.OtterCredentials>'
),
'</Inedo.BuildMaster.Extensibility.Credentials.ProGetCredentials>',
'</Inedo.Otter.Extensions.Credentials.ProGetCredentials>'
),
'</Inedo.BuildMaster.Extensibility.Credentials.PrivateKeyCredentials>',
'</Inedo.Otter.Extensions.Credentials.PrivateKeyCredentials>'
),
'</Inedo.BuildMaster.Extensibility.Credentials.UsernamePasswordCredentials>',
'</Inedo.Otter.Extensions.Credentials.UsernamePasswordCredentials>'
) AS XML)
,BC.[AllowFunctionAccess_Indicator]
FROM [BuildMaster].[dbo].[Credentials] BC
LEFT OUTER JOIN [Otter].[dbo].[Credentials] OC
ON BC.[Credential_Name] = OC.[Credential_Name]
LEFT OUTER JOIN [BuildMaster].[dbo].[Environments] BE
ON BC.[Environment_Id] = BE.[Environment_Id]
LEFT OUTER JOIN [Otter].[dbo].[Environments] OE
ON BE.[Environment_Name] = OE.[Environment_Name]
WHERE OC.[Credential_Id] IS NULL
This may be fixed by ILIB-19, which makes buffering of Docker layer uploads happen in a temporary file instead of in memory. It's very possible that SlimMemoryStream has a bug that only manifests when it has several gigabytes of data in it.
microsoft/windowsservercore has a 7GB foreign layer, and I assume you're using the allow-nondistributable-artifacts option on the Docker daemon because you mentioned the system is not connected to the internet, so the next version of ProGet will stop that 7GB upload from being buffered in memory.
If the PDB files aren't being indexed by ProGet, it's possible that ProGet can't read them for some reason.
Try compiling this program with references to ProGetCoreEx.dll and InedoLib.dll from your version of ProGet and a reference to the System.Reflection.Metadata NuGet package and then dragging and dropping your nupkg file onto the resulting exe.
If you don't care about portable PDB files, you can also skip adding the reference to System.Reflection.Metadata and remove the code between the comments.
using Inedo.ProGet.Feeds.NuGet;
using Inedo.ProGet.Symbols;
using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
namespace ReadPDB
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 1 || !args[0].EndsWith(".nupkg") || !File.Exists(args[0]))
{
Console.Error.WriteLine("Usage: ReadPDB [PackageName].nupkg");
Environment.ExitCode = 1;
return;
}
using (var zipFile = new ZipArchive(File.Open(args[0], FileMode.Open, FileAccess.Read)))
{
var pdbEntries = zipFile
.Entries
.Where(e => e.FullName.EndsWith(".pdb", StringComparison.OrdinalIgnoreCase));
foreach (var pdbEntry in pdbEntries)
{
using (var pdbStream = SeekableStream.Create(pdbEntry))
{
try
{
using (var pdbFile = new PdbFile(pdbStream, true))
{
Console.WriteLine($"PDB successfully read: {pdbEntry.FullName}");
Console.WriteLine($"GUID: {pdbFile.Guid}");
Console.WriteLine($"Age: {pdbFile.Age}");
}
}
catch (Exception ex)
{
// Start removing here if you don't want Portable PDB detection
try
{
pdbStream.Position = 0;
using (var pdbProvider = System.Reflection.Metadata.MetadataReaderProvider.FromPortablePdbStream(pdbStream, System.Reflection.Metadata.MetadataStreamOptions.LeaveOpen, (int)pdbEntry.Length))
{
var portablePdb = pdbProvider.GetMetadataReader();
Console.WriteLine($"Portable PDB (not yet supported in ProGet): {pdbEntry.FullName}");
Console.WriteLine($"ID: {BitConverter.ToString(portablePdb.DebugMetadataHeader.Id.ToArray())}");
}
}
catch
// Stop removing here if you don't want Portable PDB detection
{
Console.WriteLine($"Exception reading PDB: {pdbEntry.FullName}");
Console.WriteLine(ex);
}
}
}
Console.WriteLine();
}
}
}
}
}
I ran it on an AWS SDK package I had handy and got this output:
Portable PDB (not yet supported in ProGet): lib/net35/AWSSDK.Core.pdb
ID: 5A-C8-40-60-8B-E5-A0-41-80-C7-EE-B9-8C-A0-5B-A0-A0-62-05-B0
Portable PDB (not yet supported in ProGet): lib/net45/AWSSDK.Core.pdb
ID: 4F-87-A8-84-3D-D1-C0-47-AE-87-C2-31-06-3A-6E-1E-F3-FD-D4-B4
PDB successfully read: lib/portable-net45%2Bwin8%2Bwpa81%2Bwp8/AWSSDK.Core.pdb
GUID: dc8ebad0-50a8-472e-9cc3-60532a217cbc
Age: 1
PDB successfully read: lib/uap/AWSSDK.Core.pdb
GUID: a397a2d1-0d7d-421c-a439-2035263a60aa
Age: 1
PDB successfully read: lib/MonoAndroid10/AWSSDK.Core.pdb
GUID: 30508864-ead4-403e-9a70-7cf92ddc62b3
Age: 1
PDB successfully read: lib/win8/AWSSDK.Core.pdb
GUID: 03674990-484c-4e12-a418-95b02a794ceb
Age: 1
PDB successfully read: lib/wpa81/AWSSDK.Core.pdb
GUID: a397a2d1-0d7d-421c-a439-2035263a60aa
Age: 1
PDB successfully read: lib/wp8/AWSSDK.Core.pdb
GUID: 73cde1a1-208e-4146-84d0-556fa77badc1
Age: 1
Portable PDB (not yet supported in ProGet): lib/netstandard1.3/AWSSDK.Core.pdb
ID: 54-A2-57-38-16-AB-F1-42-A8-90-4B-6B-4E-F1-9A-FA-2F-72-9D-C7
Hello Tristen,
Are you using a custom package store, such as AWS or Azure, or are the files stored in the default (local filesystem) package store?
For images, you can upload them to an external site (such as imgur) and use the photo button on the toolbar.

Symbols are accessed through this path: /symbols/[feed name]/[dll name].dll/[guid without hyphens]/[pdb name].pdb
So for the example in the image, the URL Visual Studio would request would be http://proget-url/symbols/NuGet/Bar.dll/872237e9cd584333bbe489f59ab9c89b/Bar.pdb
Just to be clear, you're only uploading the .symbols.nuget version of the package, right? If you upload the version that is just .nuget, it will overwrite the package that's already there with one that doesn't have symbols.
Hello Rob,
Sorry for the delay. Does the error occur with any Docker image that is available on Docker Hub (or, would you be willing to share your Docker image)?
Also, are you using docker-machine or something similar to run Docker on a virtual machine, or is Docker running natively on the machine with PowerShell?
Hello Boyd,
Your first question is a visual error (the symbol server is actually enabled, but the feed management page shows disabled due to a bug) - issue number PG-1169.
For the second question, on the package page, under the Files tab, does the lib\net461 folder contain a PDB file? Symbols built with <DebugType>Full</DebugType> should work. The only debug type ProGet doesn't currently support is Portable.
Hello Javier,
There is an error in the PostgreSQL version of NuGetPackagesV2_GetLatestStable, which was introduced in the 5.0 beta. I've filed this as PG-1164 and submitted a fix for my co-workers to review.
Sorry for the late reply,
ILIB-6 is the tracking number for this bug (zero-length SlimMemoryStream throws a NullReferenceException when CopyToAsync is called).
It will be fixed in the next version of ProGet, or, as noted above, you can revert to ProGet 4.8.7. There were no database structure changes between 4.8.7 and 4.8.8, so backing up your database is recommended, but restoring an old copy is not required.
Copying the explanation from the private ticket in case anyone else has this issue:
Inedo products store timestamps in the database as UTC, but our PostgreSQL library (Npgsql) "helpfully" converts DateTime objects to the local time zone. They added a way to change this behavior in their 3.3 release, but the currently available version of Npgsql is 3.2.5.
I've written a workaround for this, where DateTime objects will be converted to UTC by the database middleware. I've filed this as ILIB-7.
Hello Julien,
I've filed this as PG-1147 and a fix should be coming in the next version of ProGet.
When this build finishes, docker pull inedo/proget will fix the issue with special characters in the database password:
https://hub.docker.com/r/inedo/proget/builds/bi8ds7thvriyfldkbh2daj6/
Hello Jason,
The issue on the second run should be fixed by ProGet 4.8.8 (docker pull inedo/proget).
Due to the very simple way our Dockerfile adds the database connection information to the configuration file, you'll need to encode < as <, > as >, " as ", and & as & if they appear somewhere (I'm guessing it's in the password).
Edit: Actually, that won't work because the database updater gets the connection information verbatim. I'll fix the Dockerfile so it encodes entities as needed.
Hello Kasper,
I can't find where I solved this before, but I think the solution was to add a trailing slash to the registry URL. That is, if your registry is at http://example.com/npm/example-npm-feed, you would need to specify the parameter for npm 5.5 as --registry=http://example.com/npm/example-npm-feed/
Hello ougwen1235,
Is there any error message in the Docker container logs? To see logs for a Docker container, use the command docker logs "container-name". (If you followed the instructions exactly, the container name is proget.)
I have reproduced the problem with the rich text editor and I will work on a fix.