Xamarin Studioでクリーンしてもクリーンされない問題
Xamarin Studioを使っているとたまに全てクリーンしてもクリーンされない時があります。 これのせいで不自然にファイルが残りそれが原因でバグることも・・・
この回避手段は簡単でobjフォルダとbinフォルダを消せば大丈夫です(少なくとも私が遭遇したケースでは)。
ただ手動で消すためだけにXamarin Studioから離れるのはアレですしそもそもXamarin Studioがちゃんと消してくれれば問題ありません。ということで...
Addin作りました
クリーンをしたとき、強制的にbinとobjを消す拡張機能を作りました。
使い方は簡単。Githubから.dllを落としてきて
/Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns (macOSの場合)
に突っ込んでやります。あとは起動してソリューションを開き、適当にファイルを開いて上部のメニューバーのビルドを選べばこんな感じに出てきます。
Forced Clean
が現在選択しているプロジェクトのみでForced Clean All
がソリューション内の(Xamarin Studioが認識している)全プロジェクト向けになります。英語おかしいのは気にしないでください
内部処理はこんな感じ
using System.IO; using MonoDevelop.Core; using MonoDevelop.Core.Execution; using MonoDevelop.Projects; namespace ForcedCleanAddin { public class ProjectCleanService { public static void Clean(Project project, OutputProgressMonitor monitor = null) { monitor?.Log.WriteLine($"{project.Name}をクリーン..."); project.Clean(ProgressMonitorService.CleanProgressMonitor, project.DefaultConfiguration.Selector); var path = project.BaseDirectory.FullPath; var binPath = Path.Combine(path, "bin"); if (Directory.Exists(binPath)) { Directory.Delete(binPath, true); monitor?.Log.WriteLine($"{binPath}を削除しました!"); } var objPath = Path.Combine(path, "obj"); if (Directory.Exists(objPath)) { Directory.Delete(objPath, true); monitor?.Log.WriteLine($"{objPath}を削除しました!"); } monitor?.Log.WriteLine("完了"); monitor?.Log.WriteLine(""); } } }
ようするに最初にXamarin Studio標準のクリーンをしたあと.csprojと同じ階層にbin
とobj
があったら強制的に消します。慈悲はありません。
もっと柔軟に(現在選択されているビルド設定(DebugとかReleaseとか)だけ消すとか)できますがこれが一番シンプルなのでこれのみです。シンプルイズベスト。
実際にこの問題にぶち当たる人がどれだけいるかわかりませんが(私は今のところめったにない)、参考までに。
追記
この拡張のVisual Studioバージョンをid:nuitsjpさんが作ってくださいました!!
流石です! これでMac(Xamarin Studio)とWindows(Visual Studio)両方でこの問題に直面しても大丈夫ですね(なお私のプラグインがちゃんと動くとは言ってない)