私は自分の会社にカスタムNuGet serverを設定しました。NuGet - パッケージ(同じ名前とバージョン番号)を上書きすることを禁止します
私は、同じ名前とバージョン番号のパッケージを公開して、既存のパッケージを上書きすることができます。これは理想的ではありません。同じ名前とバージョンのパッケージがすでに存在する場合は、NuGetサーバーでエラーを返すことをお勧めします。
私はこれをどのように達成できるかについての手がかりを教えてください。
私は自分の会社にカスタムNuGet serverを設定しました。NuGet - パッケージ(同じ名前とバージョン番号)を上書きすることを禁止します
私は、同じ名前とバージョン番号のパッケージを公開して、既存のパッケージを上書きすることができます。これは理想的ではありません。同じ名前とバージョンのパッケージがすでに存在する場合は、NuGetサーバーでエラーを返すことをお勧めします。
私はこれをどのように達成できるかについての手がかりを教えてください。
また、既存のパッケージを上書きすることを禁止します。ただし、NuGetサーバーをそのまま使用することは可能ではないようです。 A similar feature request has been closed about two years ago。
しかし、source codeを見ると、いくつかのオプションが開きます。 CreatePackage() -methodを見てください。
// Make sure they can access this package
if (Authenticate(context, apiKey, package.Id))
{
_serverRepository.AddPackage(package);
WriteStatus(context, HttpStatusCode.Created, "");
}
両方がそのようにコンストラクタ・インジェクションを使用して渡されます。これは、指定されたパッケージを追加することが許可されている(唯一のAPIキーをチェック)とIServerPackageRepositoryが実際にパッケージを追加するかどうかを確認するためにIPackageAuthenticationServiceを使用していますカスタム実装を渡すことでビヘイビアを拡張するのは簡単です(そのためにNinject bindingsを変更してください)。
私はカスタムのために行くだろうIServerPackageRepository。現在の実装では、IFileSystem.AddFile(...)を使用してパッケージを追加します。 IFileSystem.FileExists(...)を使用して、パッケージが既に存在するかどうかを確認することができます。
NuGetはSemantic Versioningに従うので、継続的な統合の観点からは、既存のパッケージを上書きすることはできません。したがって、新しいビルドには、バグ修正、新しい機能、または変更を組み込む必要があります。 しかし、私はスナップショット/プレリリースを上書きすることを許可します。
更新: V2.8には後方互換性のために真のallowOverrideExistingPackageOnPushはデフォルトオプションを持つことになりそうです。それは1e7345624dとcomittedされています。私はそれをフォークした後で実現しました。私はもう一度遅すぎたと思う;-)
私は同じ問題に遭遇しました。私は自分のSymbolSourceサーバーを走らせます。私は公開されたパッケージのログを維持することに決めました。パッケージを公開する前に、ログがすでに公開されているかどうかを確認して公開することができます。これはすべてMS-DOSバッチファイルで行われます。下記参照。
@echo off
rem Requires that the Visual Studio directory is in your
rem PATH environment variable. It will be something like:
rem C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE
rem API key for publishing to SymbolSource server
set apiKey=<<<GUID>>>
rem URL of the SymbolSource web app
set lib=http://<<<address>>>
rem Path to a simple text file on a file share - which happens to be the
rem same place that the SymbolSource server web app is published.
set log=\\<<<path>>>\publish_log.txt
rem Path to the Visual Studio solution that contains the projects to be published.
set sln=..\<<<solution name>>>.sln
rem Build all projects in the solution.
devenv %sln% /rebuild Debug
rem Delete packages produced during last run.
del *.nupkg
rem Each line in projects.txt is a path to a .csproj file that we want to
rem create a nuget package for. Each .csproj file has a corresponding .nuspec
rem file that lives in the same directory.
for /F %%i in (projects.txt) do nuget.exe pack %%i -IncludeReferencedProjects -Prop Configuration=Debug -Symbols
rem Delete any local packages that have already been published.
for /F %%i in (%log%) do if exist %%i del %%i
for %%F in (".\*.symbols.nupkg") do nuget push %%~nxF %apiKey% -source %lib%
rem Log information about published packages so, in the next run,
rem we can tell what has been published and what has not.
for %%F in (".\*.symbols.nupkg") do echo %%~nxF >> %log%
更新:過去2年間私はこのootbをサポートする[Klondike](https://github.com/themotleyfool/Klondike)を使用しています。それは素晴らしい。 – mkoertgen