2017-01-18 11 views
0

C#コンソールアプリケーションでNuGet APIを使用して内部Nexus NugetリポジトリにNugetパッケージを公開しようとしています。コードスニペット:NuGet APIを使用してパッケージを公開するには

List<Lazy<INuGetResourceProvider>> providers = new List<Lazy<INuGetResourceProvider>>(); 
providers.AddRange(Repository.Provider.GetCoreV3()); 
PackageSource packageSource = new PackageSource("http://nexus:8081/nexus/nuget-repo"); 
SourceRepository sourceRepository = new SourceRepository(packageSource, providers); 
ISettings settings = NuGet.Configuration.Settings.LoadDefaultSettings(@"C:\Users\<user>\AppData\Roaming\NuGet", null, new MachineWideSettings()); 
var packageSourceProvider = new PackageSourceProvider(settings); 
packageSourceProvider.SaveActivePackageSource(packageSource); 


try 
{ 
    await PushRunner.Run(
     settings, 
     packageSourceProvider, 
     filetouse, 
     "http://nexus:8081/nexus/nuget-repo", 
     "MY API KEY", "", "", 10, false, true, 
     new Logger()); 
} 
catch(Exception e) 
{ 
} 

私は取得しています問題はPushRunnerへの呼び出しは、例外なく、すぐに完了し、パッケージが押されていないということです。 NuGetがパッケージをプッシュしようとしているが、その後は他のログは出力されないというメッセージがコンソールに表示されます。私はnuget.exeを使用して同じパッケージをプッシュしようとしており、正常に動作します。 NuGet成果物を公開するには、Nexusサーバーにユーザー名、パスワード、およびAPIキーが必要です。

NuGet APIのマニュアルが不足しているため、問題の内容がわからなくても、正しいことをしているかどうかはわかりません。

+0

コードにユーザ名とパスワードを何らかの形で渡したいと言っておきたいと思います。私は、資格情報を入力するようにnuget.exeが促したので、資格情報(APIキーも必要)が必要であると推測しています。上記のコードをテストするとき、ユーザー固有のnuget.configに資格情報を保存しました。 – user7437257

答えて

0

これをコードで処理するには、資格プロバイダを追加できます。

https://github.com/NuGet/NuGet.Client/blob/f55f41629b0016072dc24f6effcc72e430609b6f/src/NuGet.Clients/NuGet.CommandLine/Commands/Command.cs#L156-L173

また、あなたがそのファイルから設定を読んで、あなたのnuget.configに資格情報を追加することができます。ここではnuget.exeプッシュで使用されるコードです。 nuget.exeをnuget.configでプッシュしてプロンプトが表示されないようにするには、同じ設定を読み込み、すでに実行しているコードを実行する方が簡単です。

+0

資格プロバイダを追加しようとしましたが、コールバックが呼び出されません。私は、Nuget.configに頼るのではなく、ユーザー名とパスワードを渡すことをお勧めします。いずれにしても、Nexus 3に対してNugetフォーマットを使用するかどうか不明です。Nexus 3にはNuget v3のサポートはありません。https://groups.google.com/a/glists.sonatype.com/forum/#!topic/ nexus-PackageServerusers/Zd3NOyBpOS8。しかし、nuget.exe 3.4.xはNexus 2とNexus 3にアップロードすることができます。ジャスティン、使用できるコードはありますか?私はもともとNuget.Coreで始まり、PackageServer.PushPackage()を使用しましたが、サーバーは接続を切断します。 – user7437257

+0

SetDefaultCredentialProvider()をコピーしようとしましたが、CredentialServiceは使用できません。私は単純に "CoreV2.NuGet.HttpClient.DefaultCredentialProvider = new CredentialServiceAdapter(CredentialService);"を模倣しました。 HttpHandlerResourceV3は設定しませんでした。 SetDefaultCredentialProvider()を正確に複製する必要がありますか? – user7437257

+0

何らかの作業コードがそうでなければ、私は進歩していないと感じ、Nuget.exeを直接呼び出すことに頼る必要があります(最初に 'nuget sources add ...'を呼び出し、via nuget.configを渡してください) ConfigFileを 'nuget push'に変更する)。私はむしろおそらく直接nuget.exeを呼び出すことを避けるでしょう。 – user7437257

関連する問題