NuGet PackageManager.InstallPackageAsync()引发NullReferenceException

NuGet PackageManager.InstallPackageAsync()引发NullReferenceException,nuget,nuget-package,Nuget,Nuget Package,我正在开发一个基于Nuget的插件管理系统,类似于Chocolate、PowerShell Gallery等 我想使用更新的库,而不是巧克力使用的不推荐的库。然而,V3库中的抽象量和文档的缺乏对我来说是一个严重的挑战。我仍然无法让简单的原型工作,将下载和提取一个包 以下是我的测试代码: 我在这里错过了什么?我目前也在蒙混过关。我发现这本书的来源很有用 要使示例代码正常工作,请将projectContext初始化更改为: var clientPolicyContext=clientPolicyC

我正在开发一个基于Nuget的插件管理系统,类似于Chocolate、PowerShell Gallery等

我想使用更新的库,而不是巧克力使用的不推荐的库。然而,V3库中的抽象量和文档的缺乏对我来说是一个严重的挑战。我仍然无法让简单的原型工作,将下载和提取一个包

以下是我的测试代码:


我在这里错过了什么?

我目前也在蒙混过关。我发现这本书的来源很有用

要使示例代码正常工作,请将
projectContext
初始化更改为:

var clientPolicyContext=clientPolicyContext.GetClientPolicy(设置,NullLogger.Instance);
INuGetProjectContext projectContext=新的ConsoleProjectContext(NullLogger.Instance)
{
PackageExtractionContext=新的PackageExtractionContext(
PackageSaveMode.Defaultv3,
PackageExtractionBehavior.XmlDocFileSaveMode,
clientPolicyContext,
NullLogger.Instance
)
};
在生产代码中,您可能希望使用真正的记录器,而不是
NullLogger

       private static void Main(string[] args)
        {
            try
            {
                var curDir = System.IO.Directory.GetCurrentDirectory();
                ISettings settings = Settings.LoadSpecificSettings(curDir, Settings.DefaultSettingsFileName);

                List<Lazy<INuGetResourceProvider>> resourceProviders = new List<Lazy<INuGetResourceProvider>>();
                resourceProviders.AddRange(NuGet.Protocol.Core.Types.Repository.Provider.GetCoreV3());  // Add v3 API support
                IPackageSourceProvider packageSourceProvider = new PackageSourceProvider(settings);
                SourceRepositoryProvider sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, resourceProviders);

                string projectRoot = System.IO.Path.GetFullPath("ProjectRoot");
                if (!System.IO.Directory.Exists(projectRoot)) System.IO.Directory.CreateDirectory(projectRoot);

                FolderNuGetProject nuGetProject = new FolderNuGetProject(projectRoot);

                string packagesFolderPath = System.IO.Path.GetFullPath("Packages");
                if (!System.IO.Directory.Exists(packagesFolderPath)) System.IO.Directory.CreateDirectory(packagesFolderPath);

                NuGetPackageManager packageManager = new NuGetPackageManager(sourceRepositoryProvider, settings, packagesFolderPath)
                {
                    PackagesFolderNuGetProject = nuGetProject
                };

                bool allowPrereleaseVersions = true;
                bool allowUnlisted = true;
                DependencyBehavior dependencyBehavior = DependencyBehavior.Lowest;

                ResolutionContext resolutionContext = new ResolutionContext(
                         dependencyBehavior, allowPrereleaseVersions, allowUnlisted, VersionConstraints.None);

                INuGetProjectContext projectContext = new ConsoleProjectContext(NullLogger.Instance);

                IEnumerable<SourceRepository> primarySourceRepositories = sourceRepositoryProvider.GetRepositories();

                //packageIdentity
                string packageId = "Newtonsoft.Json";
                string packageVersion = "12.0.3";
                PackageIdentity packageIdentity = new PackageIdentity(packageId, new NuGet.Versioning.NuGetVersion(packageVersion));

                var installPackageAsyncTask = packageManager.InstallPackageAsync(packageManager.PackagesFolderNuGetProject,
                    packageIdentity, resolutionContext, projectContext,
                    primarySourceRepositories, Array.Empty<SourceRepository>(), CancellationToken.None);

                installPackageAsyncTask.GetAwaiter().GetResult();
            }
            catch (Exception exp)
            {
                using (var sw = new System.IO.StreamWriter("error.txt"))
                {
                    sw.Write(exp.ToString());
                }

                Console.WriteLine(exp.ToString());
                throw;
            }
        }
System.NullReferenceException: Object reference not set to an instance of an object.
   at NuGet.ProjectManagement.FolderNuGetProject.<>c__DisplayClass13_0.<<InstallPackageAsync>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.Common.ConcurrencyUtilities.<ExecuteWithFileLockedAsync>d__3`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at NuGet.Common.ConcurrencyUtilities.<ExecuteWithFileLockedAsync>d__3`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.NuGetPackageManager.<ExecuteInstallAsync>d__85.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__76.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__76.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__76.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.NuGetPackageManager.<InstallPackageAsync>d__48.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.NuGetPackageManager.<InstallPackageAsync>d__47.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at NugetTest.Program.Main(String[] args) in C:\Git\5ec64809061464dc19a1d4e39961c565\NugetTest\Program.cs:line 66