C# 如何使用NuGet.core设置凭据提供程序?

C# 如何使用NuGet.core设置凭据提供程序?,c#,nuget,C#,Nuget,我正在尝试使用Nuget.Core访问Nuget提要,我确实有凭据提供程序,但我仍然未获得授权。我需要采取哪些步骤来获取nuget.core以使用凭据提供程序并以编程方式获取访问权限。多谢各位 如果您使用的是NuGet.Core程序集,则需要创建或使用实现NuGet.ICredentialProvider接口的类 using System; using System.Net; using NuGet; namespace Test { class MyCredentialProvide

我正在尝试使用Nuget.Core访问Nuget提要,我确实有凭据提供程序,但我仍然未获得授权。我需要采取哪些步骤来获取nuget.core以使用凭据提供程序并以编程方式获取访问权限。多谢各位

如果您使用的是NuGet.Core程序集,则需要创建或使用实现NuGet.ICredentialProvider接口的类

using System;
using System.Net;
using NuGet;

namespace Test
{
    class MyCredentialProvider : ICredentialProvider
    {
        public ICredentials GetCredentials(Uri uri, IWebProxy proxy, CredentialType credentialType, bool retrying)
        {
            // TODO return the credentials...
            throw new NotImplementedException ();
        }
    }
}
然后创建该类的实例,并将其分配给NuGet.HttpClient

NuGet.HttpClient.DefaultCredentialProvider = new MyCredentialProvider ();

此外,NuGet还提供了一个SettingsCredentialProvider类,如果您将凭据存储在NuGet.Config文件中,则可以使用该类。SettingsCredentialProvider在其构造函数中接受一个ICredentialProvider实例,因此,如果您想传递自己的实现,则可以传递该实现,如果在NuGet.Config文件中找不到凭据,则将使用该实现。或者,如果您只想使用要使用的NuGet.Config文件中存储的信息,您可以向SettingsCredentialProvider类传递一个NullCredentialProvider

我为此苦苦挣扎了好几天——GitHub让我站在了顶端,允许我创建一个API,以完全相同的方式获取凭据提供程序
NuGet.Client
有(我主要是从中复制和粘贴的)

我创造了一个

但基本上

  • 创建一个
    CredentialService
    ,并用计算机上的凭据提供程序填充它
    • 这是困难的部分,所以只需做
      Nuget.Client
      所做的事情
  • 使用您的服务设置
    HttpHandlerResourceV3.CredentialService

谢谢你的回答。对于该类,我使用什么从getCredentials()方法返回?我拥有的凭据提供程序是以“https://{account}.pkgs.visualstudio.com/_api/public/nuget/client/CredentialProviderBundle.zip”的形式提供的。我下载了它,它有一个.VSS文件和NuGet.exe。我不确定从那里开始,或者如何使用它来创建您提到的类。这是一个不同的例子。从您最初的问题中,我认为您试图使用应用程序中的NuGet.Core,而不是使用Microsoft提供的凭据提供程序。这些凭据提供程序与NuGet 3一起工作,并由NuGet 3自动拾取和使用。有一些基本上是可执行文件的文档,NuGet.exe将调用这些文件来查找用户名和密码。谢谢!这帮助我能够从PackageManager控制台完成这项工作。还有一个问题,是否有一种方法可以通过编程方式执行“Get Package-Source”或“nuget feed”-ListAvailable”等命令?我能找到的只有powershell和echo等cmd命令。您可以使用NuGet.Core.dll以编程方式查找NuGet包。上面有一个简单的例子。PackageRepository类还有一些扩展方法(例如Search),您可以使用这些方法搜索所有包,而不是示例中所示的特定包。