はじめに
NuGetエラーNU1301、NuGet警告NU1507に遭遇したときの解決法です。
経緯
ある日突然、VisualStudio2022で開発中のC#プロジェクトのビルドが通らなくなりました。
NU1301 The local source '<数週間前に削除したフォルダのパス>' doesn't exist.
こんなエラーが表示されました。指し示してしているのはcsprojファイルの「<Project Sdk="Microsoft.NET.Sdk">
」タグのようです。
数週間前に削除したフォルダが無いのはそれはそうですが、そのフォルダ自体の有無というよりその中のdllとかそういったものを探しているのでしょう。dotnetのバージョンなのか?と思い解決しようと最新の.NET SDKをインストールしたり色々restoreとか試していたらそれはそれで
NU1507 There are 2 package sources defined in your configuration. When using central package management, please map your package sources with package source mapping (https://aka.ms/nuget-package-source-mapping) or specify a single package source. The following sources are defined: nuget.org, <数週間前にアンインストールしたVisualStudioサードパーティ>.
つまり、「パッケージソースが二つあるからどっちかにしなさい」といった警告が表示される謎の状態に陥っていました。
ちなみに、アンインストールしたサードパーティはDevExpressです。
解決法
Cドライブのどこか(私の場合C:\Users\<ユーザ名>\AppData\Roaming\NuGet
)にあるNuGet.Config
の要素を消せばいいだけでした。
packageSources
という要素の中に、NU1301で指摘されているパスをvalueに持つ要素があるので、それを消します。
これでエラーNU1301は出なくなります。
また、警告NU1507で指摘されている二つ目のパッケージソースをkeyに持つ要素もあるので、念のためこちらも削除します。(警告なので必須ではないです)
NU1507のページにリンクされていたパッケージ ソース マッピングにヒントはあるのですが、別に消したものとNuGetで使い分けたいわけでもない(今後完全に使わない)ためスルーしておりました…。
おわりに
なぜ数週間大丈夫だったのかが謎のままですが、サードパーティはアンインストールするだけではきれいさっぱりなくなるわけではない、ということで今後は気を付けたいです。