diff --git a/data/resources/StringResources.de.resx b/data/resources/StringResources.de.resx
index 70ce433b9d..026bebfe3b 100644
--- a/data/resources/StringResources.de.resx
+++ b/data/resources/StringResources.de.resx
@@ -408,9 +408,6 @@ Sie werden nicht mehr funktionieren, nachdem dieses AddIn entfernt wurde! Sind S
Klassendiagramm anzeigen
-
- Konsole löschen
-
Verlauf löschen
diff --git a/data/resources/StringResources.es-mx.resx b/data/resources/StringResources.es-mx.resx
index 088c8c17a5..88cfab51ab 100644
--- a/data/resources/StringResources.es-mx.resx
+++ b/data/resources/StringResources.es-mx.resx
@@ -409,9 +409,6 @@ Dejarán de funcionar después de desinstalar este complemento! ¿Esta seguro de
Mostrar Diagrama de Clase
-
- Limpiar consola
-
Borrar Historial
diff --git a/data/resources/StringResources.es.resx b/data/resources/StringResources.es.resx
index 8aa1011786..c3886f0541 100644
--- a/data/resources/StringResources.es.resx
+++ b/data/resources/StringResources.es.resx
@@ -1679,6 +1679,9 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib
Cursiva
+
+ Subrayado
+
Exportar colores de resaltado
@@ -2077,6 +2080,9 @@ Para crear/manipular un objeto ActiveX/COM, arrastre una clase de un Control/Bib
Detener ejecución en la primera línea.
+
+ Seleccione excepciones
+
Habilitar decompilador
diff --git a/data/resources/StringResources.fr.resx b/data/resources/StringResources.fr.resx
index 9497373199..5e2fc361d7 100644
--- a/data/resources/StringResources.fr.resx
+++ b/data/resources/StringResources.fr.resx
@@ -399,8 +399,8 @@ Ils ne fonctionneront plus si vous désinstallez cet Add-In! Souhaitez-vous cont
Afficher le diagramme des classes
-
- Vider la console
+
+ Effacer la console
Effacer l'historique
@@ -2619,6 +2619,69 @@ Voulez-vous ajouter le nouveau fichier au projet ${CurrentProjectName}?
Fichier de r&essources Win32:
+
+ Informations sur l'Assembly
+
+
+ Fichier Assembly.info introuvable. Veuillez vous assurer qu'il existe dans le projet.
+
+
+ Version:
+
+
+ Conforme CLS
+
+
+ Société:
+
+
+ Copyright:
+
+
+ Alias par défaut:
+
+
+ Description:
+
+
+ Version du fichier:
+
+
+ GUID:
+
+
+ Une valeur du fichier Assembly.info est incorrecte.
+
+
+ Version informelle:
+
+
+ Optimisation JIT
+
+
+ Suivi JIT
+
+
+ Rendre l'Assembly visible par COM:
+
+
+ Language neutre:
+
+
+ Nouveau GUID
+
+
+ Aucun
+
+
+ Produit:
+
+
+ Titre:
+
+
+ Trademark:
+
Avancé
@@ -4835,6 +4898,12 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
Extension Visual Studio
+
+ Activer l'analyse de App.xml
+
+
+ Editeur WPF
+
Appuyer sur "Alt" pour saisir un Conteneur
diff --git a/data/resources/StringResources.it.resx b/data/resources/StringResources.it.resx
index 5d152acac8..cfd311c3e3 100644
--- a/data/resources/StringResources.it.resx
+++ b/data/resources/StringResources.it.resx
@@ -409,9 +409,6 @@ Smetteranno di funzionare dopo la rimozione di questo Componente! Sei sicuro di
Mostra Diagramma delle Classi
-
- Pulisci console
-
Cancella cronologia
@@ -1836,7 +1833,7 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}?
Errore parsing espressione regolare:
- Trova &tutti
+ Trov&a tutti
&Trova
@@ -2244,10 +2241,10 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}?
Cre&a copia di backup
- Codifica file predefinita:
+ Codifica fil&e predefinita:
- &Controlla modifiche esterne ai files
+ Controlla mo&difiche esterne ai files
Carica
@@ -2446,7 +2443,7 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}?
Abilita &doppio buffer
- Abilita c&artelle
+ Abilita &struttura
Carattere
@@ -2634,6 +2631,69 @@ Vuoi aggiungere il nuovo file al progetto ${CurrentProjectName}?
File di R&isorsa Win32:
+
+ Informazioni assembly
+
+
+ Il file delle informazioni dell'assembly non è stato trovato. Prego assicurarsi che il progetto contenga il file
+
+
+ Versione assembly:
+
+
+ Compatibile CLS
+
+
+ Società:
+
+
+ Copyright:
+
+
+ Alias predefinito:
+
+
+ Descrizione:
+
+
+ Versione File:
+
+
+ GUID:
+
+
+ Uno dei valori delle informazioni dell'assembly non è corretto.
+
+
+ Versione informativa:
+
+
+ Ottimizzazione JIT
+
+
+ Monitoraggio JIT
+
+
+ Rendi l'assembly visibile a COM
+
+
+ Linguaggio neutrale:
+
+
+ Nuovo GUID
+
+
+ Nessuna
+
+
+ Prodotto:
+
+
+ Titolo:
+
+
+ Marchio:
+
Avanzato
@@ -4858,6 +4918,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Estensione Visual Studio
+
+ Attiva l'analisi di App.xaml
+
+
+ Editor WPF
+
Premere "Alt" per entrare nel Contenitore
@@ -5345,7 +5411,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Interrompi
- Arresta su l'eccezione gestita ${ExceptionName}
+ Arresta su eccezione gestita ${ExceptionName}
Continua
@@ -6170,10 +6236,10 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Aggiorna bitmap ...
- Cursore di aggiornamento ...
+ Aggiorna cursore ...
- Icona di aggiornamento ...
+ Aggiorna icona ...
Vuoi veramente cancellare la(e) risorsa(e) selezionata(e)?
@@ -7449,7 +7515,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati.
Ferma il processo corrente e termina il debug.
- Attiva/Disattiva BreakPoint
+ Commuta Breakpoint
&Modifica
@@ -7479,10 +7545,10 @@ I files di risorsa sono stati di conseguenza rinominati/spostati.
Mostra solo le &definizioni
- Mostra &tutte le Cartelle
+ Commuta &tutte le Cartelle
- Mo&stra cartella
+ Commu&ta cartella
&Formato
@@ -7668,7 +7734,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati.
&Mezzo
- &Centro nella Form
+ &Centra nella Form
&Orizzontalmente
@@ -7695,7 +7761,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati.
Rendi &Uguali
- Porta in &Sfondo
+ Porta su &Sfondo
A&llinea Icone
@@ -7749,7 +7815,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati.
&Incrementa
- Rendi &Uguali
+ Rendi &Uguale
&Aiuto
@@ -7809,7 +7875,7 @@ I files di risorsa sono stati di conseguenza rinominati/spostati.
Compila il progetto o il buffer corrente (quando nessun progetto è aperto)(salva automaticamente)
- Devi interrompere il debugger generare il progetto.
+ Devi interrompere il debugger per generare il progetto.
Vuoi fermare il debug?
@@ -7843,7 +7909,7 @@ Vuoi fermare il debug?
&Vai a...
- Vai alla parentesi graffa
+ Vai alla parentesi graffa corrispondente
Ricerca Incrementale
@@ -7870,7 +7936,7 @@ Vuoi fermare il debug?
Cerca per Problemi...
- A&ttiva segnalibro
+ Commu&ta segnalibro
Mette/toglie segnalibro alla linea corrente
diff --git a/data/resources/StringResources.ru.resx b/data/resources/StringResources.ru.resx
index 0b3c5b5e5a..8afb53be2d 100644
--- a/data/resources/StringResources.ru.resx
+++ b/data/resources/StringResources.ru.resx
@@ -405,9 +405,6 @@
Показать диаграмму классов
-
- Очистить консоль
-
Удалить историю
@@ -454,7 +451,7 @@
Не удалось запустить Help Library Manager, так как каталог справки не выбран/не установлен. Пожалуйста, проверьте настройки (Инструменты -> Параметры -> Инструменты -> Microsoft Help Viewer).
- Не удалось найти Help Library Manager. Для использования контекстной помощи в SharpDeveloper, необходимо скачать и установить Microsoft's Windows SDK 7.1.
+ Не удалось найти Help Library Manager. Для использования контекстной помощи в SharpDevelop, необходимо скачать и установить Microsoft Windows SDK 7.1.
Не удалось найти Help Library Manager. Пожалуйста, удостоверьтесь в том, что он был корректно установлен.
@@ -2589,6 +2586,69 @@
Файл ресурсов Win32:
+
+ Данные сборки
+
+
+ Файл AssemblyInfo.cs не найден. Убедитесь в том, что проект содержит файл с данными сборки.
+
+
+ Версия сборки:
+
+
+ Соответствие спецификации CLS
+
+
+ Компания:
+
+
+ Копирайт:
+
+
+ Псевдоним:
+
+
+ Описание:
+
+
+ Версия файла:
+
+
+ GUID:
+
+
+ Одно из значений данных сборки указано неверно.
+
+
+ Информативная версия:
+
+
+ JIT-оптимизация
+
+
+ JIT-отслеживание
+
+
+ Сборка видима для COM
+
+
+ Нейтральный язык:
+
+
+ Новый GUID
+
+
+ не указано
+
+
+ Продукт:
+
+
+ Наименование:
+
+
+ Торговая марка:
+
Дополнительно
@@ -2815,7 +2875,7 @@
Выберите строгое имя для файла ключа:
- Подписывание ВОдинЩелчок
+ Подпись ClickOnce
Подпись ClickOnce приложения пока не реализована.
@@ -3807,6 +3867,12 @@
Невозможно создать PrintDocument
+
+ Файл, защищённый от записи, уже существует в данном каталоге.
+
+
+ Для проекта данного типа не установлен обработчик.
+
Файл проекта не найден.
@@ -4055,7 +4121,7 @@
Добавлять комментарий "TODO" в обработчики новых событий
- Назначение свойств (работает быстрее для небольшого количества свойств, но значительно хуже для большого числа свойств)
+ Присваивание значений (подходит для небольшого количества свойств)
Модель локализации по умолчанию
@@ -4067,7 +4133,7 @@
Модель локализации
- Рефлексия свойств (работает медленнее во время выполнения программы для небольшого количества свойств, но значительно лучше при большом числе свойств, особенно со значениями по умолчанию)
+ Рефлексия (подходит для большого числа свойств, особенно со значениями по умолчанию)
Дизайнер форм
@@ -4443,22 +4509,22 @@
Покрытие кода
- Создать выходной XML файл
+ Создавать XML-файл с результатами
- Пометить каждый тест
+ Отмечать каждый тест
- Теневая копия
+ Теневое копирование сборок
- Показать логотип
+ Показывать логотип
- Показать прогресс
+ Показывать прогресс
- Запустить тесты в отдельном потоке
+ Запускать тесты в отдельном потоке
Запустить все тесты с покрытием кода
@@ -5431,13 +5497,13 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Невозможно сделать шаг, так как отсутствует активная выбранная функция
- Вы не можете переключиться на поток, с недоступным фреймом исполнения.
+ Вы не можете переключиться на поток с недоступным фреймом исполнения.
Вы не можете переключать потоки пока включён отладчик.
- Вы не можете переключиться на поток в декомпилированном коде, без включения декомпилятора.
+ Вы не можете переключиться на поток в декомпилированном коде без включения декомпилятора.
Заморозить
@@ -6028,7 +6094,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Нецифровой символ
- Не пробельный символ
+ Непробельный символ
Небуквенный символ
@@ -6181,7 +6247,7 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Файлы проектов Visual Basic
- XML файлы (*.xml)
+ XML-файлы (*.xml)
Файлы схем XML (*.xsd)
@@ -6259,10 +6325,10 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
Найти базовые символы
- Найти полученные классы
+ Найти наследуемые классы
- Найти полученные символы
+ Найти наследуемые символы
Поиск ссылок...
@@ -7025,10 +7091,10 @@ SharpDevelop 2 иначе компилировал ресурсы: имя рес
Файл App.Config
- Пустой XML файл
+ Пустой XML-файл
- Создаёт пустой XML файл.
+ Создаёт пустой XML-файл.
Создать пустую форму XML
diff --git a/data/resources/StringResources.tr.resx b/data/resources/StringResources.tr.resx
index e6ef635929..bc6416fde2 100644
--- a/data/resources/StringResources.tr.resx
+++ b/data/resources/StringResources.tr.resx
@@ -408,6 +408,9 @@ Eklenti kaldırıldıktan sonra çalışması durabilir! Devam etmek istediğini
Sınıf Şemasını Göster
+
+ Geçmişi sil
+
Bu işlem için TortoiseGit yüklü olmalıdır.
@@ -525,6 +528,21 @@ Eklenti kaldırıldıktan sonra çalışması durabilir! Devam etmek istediğini
Başlık
+
+ Paket yönetim konsolu
+
+
+ Paketleri yönet...
+
+
+ Paketleri geri yükle
+
+
+ Paket kaynakları
+
+
+ Paket yönetimi
+
Sonuç
@@ -1573,6 +1591,9 @@ Bir ActiveX / COM nesnesi oluşturmak / değiştirmek için, nesne ağacı veya
Parametreli anonim yöntem yerleştir.
+
+ Kolonlar:
+
SharpDevelop Hakkında
@@ -1594,6 +1615,12 @@ Bir ActiveX / COM nesnesi oluşturmak / değiştirmek için, nesne ağacı veya
Sürüm
+
+ İşlemler:
+
+
+ Servisler:
+
son dosyalar
@@ -1680,6 +1707,9 @@ Satır numaraları, sınıf yada dosya adları girebilirsiniz.
İtalik
+
+ Altı çizili
+
Renk vurgulamayı dışa aktar
@@ -1984,6 +2014,12 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz?
Önbelleği temizle
+
+ Basılı karaktere bağlı kalarak seçili kod tamamlamayı ekle:
+
+
+ Sadece <Tab> veya <Enter> tuşuna basarak seçili kod tamamlama öğersi ekle.
+
Bir karakter eklendiğinde tamamlama listesini göster
@@ -2005,6 +2041,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz?
Kaydet
+
+ İpucu ayarları
+
Araçipuçları linkler gitmeli
@@ -2068,12 +2107,24 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz?
Yürütmenin ilk satırında ara ver.
+
+ İstisnaları seçiniz
+
Tekrar derlemeyi etkinleştir
Düzenle ve Devam eti Etkinleştir
+
+ Tam istisna adı
+
+
+ Hata ayıklayıcıyı duraklat
+
+
+ Hata ayıklayıcının durmasını istediğiniz istisna tiplerini seçiniz
+
İstisnalar
@@ -2467,6 +2518,9 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz?
Derlemenin oluşturulacağı dizini seçin.
+
+ Servis referansları
+
Vurgu
@@ -2662,6 +2716,12 @@ Yeni dosyayı, ${CurrentProjectName} projesine eklemek istiyor musunuz?
Yapılandırmayı değiştirmek mevcut değerleri kaydeder. Devam edilsin mi?
+
+ Dosya isimleri:
+
+
+ Derledikten sonra çalıştır.
+
Hata Ayıkla
@@ -2839,6 +2899,9 @@ Ayrıca bir ayarı proje dosyası yerine kullanıcı dosyası(.user-file) içind
Mevcut sınıfı kullan:
+
+ Mümkünse hataları otomatik olarak düzelt
+
.NET Derleme Tarayıcısı
@@ -3091,12 +3154,27 @@ Ayrıca bir ayarı proje dosyası yerine kullanıcı dosyası(.user-file) içind
Değiştir
+
+ Yeniden başlat
+
Yeniden Dene
Hepsini Seç
+
+ Alt
+
+
+ Ctrl
+
+
+ Shift
+
+
+ Win
+
Küçük Simgeler
@@ -3633,6 +3711,9 @@ Lütfen SharpDevelop Seçeneklerinden NAnt çalıştırılabilir dosyasının ye
'{0}' türü bulunamıyor. Bir derleme bilgisi eksik olabilir mi?
+
+ Kursorün bulunduğu pozisyonda tip tanımı veya tip üyesi bulunamadı
+
Seçilen eleman sınıfsız veya geçersiz bir üye, bu yüzden türetilmemiş semboller gösterilebilir.
@@ -4936,6 +5017,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
Derleme başarılı oldu.
+
+ ${Name} projesinin derlenmesi desteklenmemektedir.
+
Derleme başladı.
@@ -5197,6 +5281,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
Kesme
+
+ ${ExceptionName} öngörülen istisna durumunda duraklat
+
Devam
@@ -5524,6 +5611,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
Hata Ayıkla
+
+ Metin çok uzun olduğundan kısaltılmıştır.
+
Projeler
@@ -5587,6 +5677,24 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
Görev Listesi
+
+ Açık olan tüm dosyalarda
+
+
+ Sınıf/Modül
+
+
+ Dosya
+
+
+ Ad alanı
+
+
+ Proje
+
+
+ Çözüm
+
Araçlar
@@ -5998,15 +6106,27 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
Resmi güncelle...
+
+ İmleci güncelle ...
+
+
+ İkonu güncelle ...
+
Seçili kaynağı silmek istediğinizden emin misiniz?
Kaynağı sil
+
+ Filtre:
+
Kaynak yüklenemiyor
+
+ Kaynak dosyadan {0} yüklenemedi.
+
Hata: Kaynak kodu üreteci "{0}" kaynak dosyasını atladı, çünkü oluşturulan sınıf mevcut sınıf "{1}" ile çakışıyor.
@@ -6019,6 +6139,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
İçerik
+
+ Boolean giriş & ekle
+
Dosyaları ekle...
@@ -6139,6 +6262,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
${Name} Temel sınıfları
+
+ ${Name} temel üyesidir
+
Bu işlem yerine getirilemez çünkü kaynak kodlarınızda hata var:
@@ -6187,6 +6313,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
Temel sınıfları bul
+
+ Temel semboleri bul
+
Türetilmiş sınıfları bul
@@ -6491,6 +6620,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Rapor Türü
+
+ Temel rapor ayarları
+
Dosya Adı
@@ -6530,6 +6662,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Tablo Düzeni
+
+ Sayfa düzeni
+
Veri Modeli Çek
@@ -6545,9 +6680,18 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Mevcut Alanlar
+
+ Proje seçili değildir,lütfen alan adlarını giriniz
+
+
+ Seçili projedeki sınıflar
+
Sorgu Sonucunu Göster
+
+ SharpReport sihirbazına hoşgeldiniz
+
Sekme Ekle
@@ -7658,6 +7802,9 @@ Kaynak dosyaları buna göre yeniden adlandırıldı/taşındı.
Artan Aramayı Geri Al
+
+ Sorunları araştır...
+
Yer imlerini ters çevir
@@ -7773,6 +7920,9 @@ Başlatma hatası:
Yeniden Düzenleme
+
+ Tekrar formatla
+
Bölgeyi yorumlama
diff --git a/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj b/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj
index 22ac5f838c..c1929bd72d 100644
--- a/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj
+++ b/src/AddIns/Debugger/Debugger.Tests/Debugger.Tests.csproj
@@ -44,6 +44,9 @@
+
+ DotnetDetection.cs
+
diff --git a/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs b/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs
index e287193ed7..237fa49504 100644
--- a/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs
+++ b/src/AddIns/Debugger/Debugger.Tests/DebuggerTestsBase.cs
@@ -28,6 +28,7 @@ using System.Security.Cryptography;
using System.Text;
using System.Xml;
using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop;
using Microsoft.CSharp;
using NUnit.Framework;
@@ -209,6 +210,10 @@ namespace Debugger.Tests
void StartTest(string testName, bool wait)
{
+ if (!IsRuntimeCompatible()) {
+ Assert.Ignore();
+ return;
+ }
this.testName = testName;
string exeFilename = CompileTest(testName);
@@ -595,5 +600,13 @@ namespace Debugger.Tests
// (see https://github.com/icsharpcode/SharpDevelop/issues/581)
return true;
}
+
+ ///
+ /// Debugger Tests currently require .NET 4.6
+ ///
+ protected static bool IsRuntimeCompatible()
+ {
+ return DotnetDetection.IsDotnet46Installed();
+ }
}
}
diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs
index 653f5ad42a..3a72036b4e 100644
--- a/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs
+++ b/src/AddIns/Debugger/Debugger.Tests/Tests/Breakpoint_Tests.cs
@@ -92,6 +92,7 @@ namespace Debugger.Tests {
Line="30" />
System.Configuration.dll (No symbols)
+ System.Core.dll (No symbols)
System.Xml.dll (No symbols)
Main 1\r\n
Breakpoint_Tests.cs:29,4-29,49
diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs
index b971fdb6f6..5bc0c7c07b 100644
--- a/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs
+++ b/src/AddIns/Debugger/Debugger.Tests/Tests/Process_MemoryReadWrite.cs
@@ -88,6 +88,7 @@ namespace Debugger.Tests {
5 0 0 0 48 0 65 0 6C 0 6C 0 6F 0
6 0 0 0 20 0 20 0 20 0 20 0 20 0 21 0
System.Configuration.dll (No symbols)
+ System.Core.dll (No symbols)
System.Xml.dll (No symbols)
Hello world!\r\n
diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs
index e511d620e9..b47e1cbf88 100644
--- a/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs
+++ b/src/AddIns/Debugger/Debugger.Tests/Tests/StackFrame_SetIP.cs
@@ -65,6 +65,7 @@ namespace Debugger.Tests {
StackFrame_SetIP.exe (Has symbols)
System.dll (No symbols)
System.Configuration.dll (No symbols)
+ System.Core.dll (No symbols)
System.Xml.dll (No symbols)
1\r\n
StackFrame_SetIP.cs:28,4-28,40
diff --git a/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs b/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs
index fbeb228d6f..d755d62a49 100644
--- a/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs
+++ b/src/AddIns/Debugger/Debugger.Tests/Tests/_HelloWorldTest.cs
@@ -38,6 +38,8 @@ namespace Debugger.Tests {
[NUnit.Framework.Test]
public void _HelloWorldTest()
{
+ if (!IsRuntimeCompatible())
+ NUnit.Framework.Assert.Ignore();
StartTest();
EndTest();
@@ -56,6 +58,7 @@ namespace Debugger.Tests {
_HelloWorldTest.exe (Has symbols)
System.dll (No symbols)
System.Configuration.dll (No symbols)
+ System.Core.dll (No symbols)
System.Xml.dll (No symbols)
Hello world!\r\n
_HelloWorldTest.cs:29,4-29,40
diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
index 45f8f1c523..39ea549108 100644
--- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
+++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
@@ -204,5 +204,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
}
public bool DevelopmentDependency { get; set; }
+
+ public void ExtractContents(IFileSystem fileSystem, string extractPath)
+ {
+ throw new NotImplementedException();
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
index 93dab21b5e..92a6db9125 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/InstallPackageCmdlet.cs
@@ -62,6 +62,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter]
public FileConflictAction FileConflictAction { get; set; }
+ [Parameter]
+ public DependencyVersion? DependencyVersion { get; set; }
+
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
@@ -99,6 +102,9 @@ namespace ICSharpCode.PackageManagement.Cmdlets
action.IgnoreDependencies = IgnoreDependencies.IsPresent;
action.AllowPrereleaseVersions = IncludePrerelease.IsPresent;
action.PackageScriptRunner = this;
+ if (DependencyVersion.HasValue) {
+ action.DependencyVersion = DependencyVersion.Value;
+ }
return action;
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
index 4c920e79ef..4ed8c94270 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/UpdatePackageCmdlet.cs
@@ -69,6 +69,10 @@ namespace ICSharpCode.PackageManagement.Cmdlets
[Parameter]
public FileConflictAction FileConflictAction { get; set; }
+ [Parameter(Mandatory = true, ParameterSetName = "Reinstall")]
+ [Parameter(ParameterSetName = "All")]
+ public SwitchParameter Reinstall { get; set; }
+
protected override void ProcessRecord()
{
ThrowErrorIfProjectNotOpen();
@@ -88,15 +92,31 @@ namespace ICSharpCode.PackageManagement.Cmdlets
{
if (HasPackageId()) {
if (HasProjectName()) {
- UpdatePackageInSingleProject();
+ if (Reinstall) {
+ ReinstallPackageInSingleProject();
+ } else {
+ UpdatePackageInSingleProject();
+ }
} else {
- UpdatePackageInAllProjects();
+ if (Reinstall) {
+ ReinstallPackageInAllProjects();
+ } else {
+ UpdatePackageInAllProjects();
+ }
}
} else {
if (HasProjectName()) {
- UpdateAllPackagesInProject();
+ if (Reinstall) {
+ ReinstallAllPackagesInProject();
+ } else {
+ UpdateAllPackagesInProject();
+ }
} else {
- UpdateAllPackagesInSolution();
+ if (Reinstall) {
+ ReinstallAllPackagesInSolution();
+ } else {
+ UpdateAllPackagesInSolution();
+ }
}
}
}
@@ -208,5 +228,93 @@ namespace ICSharpCode.PackageManagement.Cmdlets
{
return new PackageReference(Id, Version, null, null, false, false);
}
+
+ void ReinstallPackageInSingleProject()
+ {
+ IPackageManagementProject project = GetProject();
+ IPackage package = FindPackageOrThrow(project);
+ ReinstallPackageInProject(project, package);
+ }
+
+ IPackage FindPackageOrThrow(IPackageManagementProject project)
+ {
+ IPackage package = project.FindPackage(Id, null);
+ if (package != null) {
+ return package;
+ }
+
+ throw CreatePackageNotFoundException(Id);
+ }
+
+ static InvalidOperationException CreatePackageNotFoundException(string packageId)
+ {
+ string message = String.Format("Unable to find package '{0}'.", packageId);
+ throw new InvalidOperationException(message);
+ }
+
+ void ReinstallPackageInProject(IPackageManagementProject project, IPackage package)
+ {
+ ReinstallPackageAction action = CreateReinstallPackageAction(project, package);
+ using (IDisposable operation = StartReinstallOperation(action)) {
+ action.Execute();
+ }
+ }
+
+ IDisposable StartReinstallOperation(ReinstallPackageAction action)
+ {
+ return action.Project.SourceRepository.StartReinstallOperation(action.PackageId);
+ }
+
+ ReinstallPackageAction CreateReinstallPackageAction(IPackageManagementProject project, IPackage package)
+ {
+ ReinstallPackageAction action = project.CreateReinstallPackageAction();
+ action.PackageId = package.Id;
+ action.PackageVersion = package.Version;
+ action.UpdateDependencies = UpdateDependencies;
+ action.AllowPrereleaseVersions = AllowPreleaseVersions || !package.IsReleaseVersion();
+ action.PackageScriptRunner = this;
+ return action;
+ }
+
+ void ReinstallAllPackagesInProject()
+ {
+ ReinstallAllPackagesInProject(GetProject());
+ }
+
+ void ReinstallAllPackagesInProject(IPackageManagementProject project)
+ {
+ // No need to update dependencies since all packages will be reinstalled.
+ IgnoreDependencies = true;
+
+ foreach (IPackage package in project.GetPackages()) {
+ ReinstallPackageInProject(project, package);
+ }
+ }
+
+ void ReinstallPackageInAllProjects()
+ {
+ bool foundPackage = false;
+
+ IPackageRepository repository = GetActivePackageRepository();
+ foreach (IPackageManagementProject project in ConsoleHost.Solution.GetProjects(repository)) {
+ IPackage package = project.FindPackage(Id, null);
+ if (package != null) {
+ foundPackage = true;
+ ReinstallPackageInProject(project, package);
+ }
+ }
+
+ if (!foundPackage) {
+ throw CreatePackageNotFoundException(Id);
+ }
+ }
+
+ void ReinstallAllPackagesInSolution()
+ {
+ IPackageRepository repository = GetActivePackageRepository();
+ foreach (IPackageManagementProject project in ConsoleHost.Solution.GetProjects(repository)) {
+ ReinstallAllPackagesInProject(project);
+ }
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
index 8dbbe66d67..b435fc9150 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/InstallPackageCmdletTests.cs
@@ -335,5 +335,28 @@ namespace PackageManagement.Cmdlets.Tests
fakeConsoleHost.AssertLoggerIsDisposed();
Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger);
}
+
+ [Test]
+ public void ProcessRecord_DependencyVersionSetToHighest_DependencyVersionUsedWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ cmdlet.DependencyVersion = DependencyVersion.Highest;
+
+ RunCmdlet();
+
+ DependencyVersion actualDependencyVersion = fakeProject.LastInstallPackageCreated.DependencyVersion;
+ Assert.AreEqual(DependencyVersion.Highest, actualDependencyVersion);
+ }
+
+ [Test]
+ public void ProcessRecord_DependencyVersionNotSett_DependencyVersionSetToLowestWhenInstallingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+
+ RunCmdlet();
+
+ DependencyVersion actualDependencyVersion = fakeProject.LastInstallPackageCreated.DependencyVersion;
+ Assert.AreEqual(DependencyVersion.Lowest, actualDependencyVersion);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
index e683100c35..88abaddb74 100644
--- a/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/UpdatePackageCmdletTests.cs
@@ -17,6 +17,8 @@
// DEALINGS IN THE SOFTWARE.
using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Management.Automation;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
@@ -179,6 +181,26 @@ namespace PackageManagement.Cmdlets.Tests
return action;
}
+ FakeReinstallPackageAction ReinstallPackageInSingleProjectAction {
+ get { return fakeProject.FakeReinstallPackageActionsCreated.First(); }
+ }
+
+ List ReinstallPackageActionsCreated {
+ get { return fakeProject.FakeReinstallPackageActionsCreated; }
+ }
+
+ FakePackage ProjectHasPackageInstalled(string packageId, string version)
+ {
+ return ProjectHasPackageInstalled(fakeProject, packageId, version);
+ }
+
+ static FakePackage ProjectHasPackageInstalled(FakePackageManagementProject project, string packageId, string version)
+ {
+ FakePackage package = project.FakeLocalRepository.AddFakePackageWithVersion(packageId, version);
+ project.FakePackages.Add(package);
+ return package;
+ }
+
[Test]
public void ProcessRecord_NoActiveProject_ThrowsNoProjectOpenTerminatingError()
{
@@ -846,5 +868,296 @@ namespace PackageManagement.Cmdlets.Tests
fakeConsoleHost.AssertLoggerIsDisposed();
Assert.AreEqual(cmdlet, fakeConsoleHost.CmdletLoggerUsedToCreateLogger);
}
+
+ [Test]
+ public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecified_ReinstallPackageActionIsExecuted()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
+
+ RunCmdlet();
+
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
+ Assert.AreEqual(cmdlet, ReinstallPackageInSingleProjectAction.PackageScriptRunner);
+ Assert.AreEqual("Test", ReinstallPackageInSingleProjectAction.PackageId);
+ Assert.AreEqual(testPackage.Version, ReinstallPackageInSingleProjectAction.PackageVersion);
+ Assert.IsFalse(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions);
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.UpdateDependencies);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallPackageIdIntoProjectWhenPackageIdNotFound_ExceptionThrownAboutMissingPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetIdParameter("UnknownPackageId");
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ FakePackage testPackage = fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
+
+ var ex = Assert.Throws(RunCmdlet);
+
+ Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndSourceRepositoryIsOperationAware_ReinstallOperationStartedAndDisposedForPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ fakeProject.FakeLocalRepository.AddFakePackage("Test");
+ var operationAwareRepository = new FakeOperationAwarePackageRepository();
+ fakeProject.FakeSourceRepository = operationAwareRepository;
+ cmdlet.Reinstall = true;
+
+ RunCmdlet();
+
+ operationAwareRepository.AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "Test");
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndIncludePrerelease_PrereleasesAllowedForReinstall()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ cmdlet.IncludePrerelease = true;
+ fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
+
+ RunCmdlet();
+
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndLocalPackageIsPrerelease_PrereleasesAllowedForReinstall()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ cmdlet.IncludePrerelease = false;
+ fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3-alpha1");
+
+ RunCmdlet();
+
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.AllowPrereleaseVersions);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallWhenPackageIdAndProjectNameSpecifiedAndIgnoreDependenciesIsTrue_DoNotUpdateDepenenciesOnReinstall()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetIdParameter("Test");
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ cmdlet.IgnoreDependencies = true;
+ fakeProject.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.2.3");
+
+ RunCmdlet();
+
+ Assert.IsTrue(ReinstallPackageInSingleProjectAction.IsExecuted);
+ Assert.IsFalse(ReinstallPackageInSingleProjectAction.UpdateDependencies);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallAllPackagesInProjectWithTwoPackages_BothPackagesReinstalled()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ cmdlet.IgnoreDependencies = false;
+ FakePackage packageA = ProjectHasPackageInstalled("PackageA", "1.1");
+ FakePackage packageB = ProjectHasPackageInstalled("PackageB", "1.2");
+
+ RunCmdlet();
+
+ Assert.AreEqual(2, ReinstallPackageActionsCreated.Count);
+ Assert.IsTrue(ReinstallPackageActionsCreated[0].IsExecuted);
+ Assert.IsTrue(ReinstallPackageActionsCreated[1].IsExecuted);
+ Assert.AreEqual(cmdlet, ReinstallPackageActionsCreated[0].PackageScriptRunner);
+ Assert.AreEqual(cmdlet, ReinstallPackageActionsCreated[1].PackageScriptRunner);
+ Assert.AreEqual("PackageA", ReinstallPackageActionsCreated[0].PackageId);
+ Assert.AreEqual("PackageB", ReinstallPackageActionsCreated[1].PackageId);
+ Assert.AreEqual(packageA.Version, ReinstallPackageActionsCreated[0].PackageVersion);
+ Assert.AreEqual(packageB.Version, ReinstallPackageActionsCreated[1].PackageVersion);
+ Assert.IsFalse(ReinstallPackageActionsCreated[0].AllowPrereleaseVersions);
+ Assert.IsFalse(ReinstallPackageActionsCreated[1].AllowPrereleaseVersions);
+ Assert.IsFalse(ReinstallPackageActionsCreated[0].UpdateDependencies);
+ Assert.IsFalse(ReinstallPackageActionsCreated[1].UpdateDependencies);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallAllPackagesInProjectWhenSourceRepositoryIsOperationAware_ReinstallOperationStartedAndDisposedForEachPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ SetProjectNameParameter("MyProject");
+ cmdlet.Reinstall = true;
+ ProjectHasPackageInstalled("PackageA", "1.1");
+ ProjectHasPackageInstalled("PackageB", "1.2");
+ var operationAwareRepository = new FakeOperationAwarePackageRepository();
+ fakeProject.FakeSourceRepository = operationAwareRepository;
+ cmdlet.Reinstall = true;
+
+ RunCmdlet();
+
+ Assert.AreEqual(2, operationAwareRepository.OperationsStarted.Count);
+ operationAwareRepository.OperationsStarted[0].AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "PackageA");
+ operationAwareRepository.OperationsStarted[1].AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "PackageB");
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallPackageInAllProjectsWhenThreeProjectsButOnlyTwoHavePackage_PackageIsReinstalledInProjects()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ AddPackageSourceToConsoleHost();
+ SetSourceParameter("Test");
+ SetIdParameter("B");
+ cmdlet.Reinstall = true;
+ cmdlet.IgnoreDependencies = false;
+ FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
+ FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
+ FakePackageManagementProject project3 = fakeSolution.AddFakeProject("Project3");
+ ProjectHasPackageInstalled(project1, "A", "1.1");
+ ProjectHasPackageInstalled(project1, "B", "1.2");
+ ProjectHasPackageInstalled(project3, "A", "1.1");
+ ProjectHasPackageInstalled(project3, "B", "1.3");
+
+ RunCmdlet();
+
+ FakeReinstallPackageAction project1ReinstallAction = project1.FakeReinstallPackageActionsCreated.Single();
+ FakeReinstallPackageAction project3ReinstallAction = project3.FakeReinstallPackageActionsCreated.Single();
+ Assert.AreEqual(0, project2.FakeReinstallPackageActionsCreated.Count);
+ Assert.IsTrue(project1ReinstallAction.IsExecuted);
+ Assert.IsTrue(project3ReinstallAction.IsExecuted);
+ Assert.AreEqual(project1, project1ReinstallAction.Project);
+ Assert.AreEqual(project3, project3ReinstallAction.Project);
+ Assert.AreEqual(cmdlet, project1ReinstallAction.PackageScriptRunner);
+ Assert.AreEqual(cmdlet, project3ReinstallAction.PackageScriptRunner);
+ Assert.AreEqual("B", project1ReinstallAction.PackageId);
+ Assert.AreEqual("B", project3ReinstallAction.PackageId);
+ Assert.AreEqual("1.2", project1ReinstallAction.PackageVersion.ToString());
+ Assert.AreEqual("1.3", project3ReinstallAction.PackageVersion.ToString());
+ Assert.IsFalse(project1ReinstallAction.AllowPrereleaseVersions);
+ Assert.IsFalse(project3ReinstallAction.AllowPrereleaseVersions);
+ Assert.IsTrue(project1ReinstallAction.UpdateDependencies);
+ Assert.IsTrue(project3ReinstallAction.UpdateDependencies);
+ Assert.AreEqual("Test", fakeConsoleHost.PackageSourcePassedToGetActivePackageSource);
+ Assert.AreEqual(fakeConsoleHost.FakePackageRepository, fakeSolution.SourceRepositoryPassedToGetProjects);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallPackageInAllProjects_ReinstallOperationStartedAndDisposedForEachPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ AddPackageSourceToConsoleHost();
+ SetSourceParameter("Test");
+ SetIdParameter("B");
+ cmdlet.Reinstall = true;
+ cmdlet.IgnoreDependencies = false;
+ FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
+ FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
+ ProjectHasPackageInstalled(project1, "A", "1.1");
+ ProjectHasPackageInstalled(project1, "B", "1.2");
+ ProjectHasPackageInstalled(project2, "A", "1.1");
+ ProjectHasPackageInstalled(project2, "B", "1.3");
+ var operationAwareRepository1 = new FakeOperationAwarePackageRepository();
+ project1.FakeSourceRepository = operationAwareRepository1;
+ var operationAwareRepository2 = new FakeOperationAwarePackageRepository();
+ project2.FakeSourceRepository = operationAwareRepository2;
+
+ RunCmdlet();
+
+ operationAwareRepository1.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
+ operationAwareRepository2.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallPackageInAllProjectsButPackageNotFound_ExceptionThrown()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ AddPackageSourceToConsoleHost();
+ SetSourceParameter("Test");
+ SetIdParameter("UnknownPackageId");
+ cmdlet.Reinstall = true;
+ FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
+ FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
+ FakePackageManagementProject project3 = fakeSolution.AddFakeProject("Project3");
+
+ var ex = Assert.Throws(RunCmdlet);
+
+ Assert.AreEqual("Unable to find package 'UnknownPackageId'.", ex.Message);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallAllPackagesInAllProjects_PackagesAreReinstalledInAllProjects()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ AddPackageSourceToConsoleHost();
+ SetSourceParameter("Test");
+ cmdlet.Reinstall = true;
+ cmdlet.IgnoreDependencies = false;
+ FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
+ FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
+ ProjectHasPackageInstalled(project1, "A", "1.1");
+ ProjectHasPackageInstalled(project1, "B", "1.2");
+ ProjectHasPackageInstalled(project2, "A", "1.4");
+
+ RunCmdlet();
+
+ FakeReinstallPackageAction project2ReinstallAction = project2.FakeReinstallPackageActionsCreated.Single();
+ Assert.AreEqual(2, project1.FakeReinstallPackageActionsCreated.Count);
+ Assert.IsTrue(project1.FakeReinstallPackageActionsCreated[0].IsExecuted);
+ Assert.IsTrue(project1.FakeReinstallPackageActionsCreated[1].IsExecuted);
+ Assert.IsTrue(project2ReinstallAction.IsExecuted);
+ Assert.AreEqual(project1, project1.FakeReinstallPackageActionsCreated[0].Project);
+ Assert.AreEqual(project1, project1.FakeReinstallPackageActionsCreated[1].Project);
+ Assert.AreEqual(project2, project2ReinstallAction.Project);
+ Assert.AreEqual(cmdlet, project1.FakeReinstallPackageActionsCreated[0].PackageScriptRunner);
+ Assert.AreEqual(cmdlet, project1.FakeReinstallPackageActionsCreated[1].PackageScriptRunner);
+ Assert.AreEqual(cmdlet, project2ReinstallAction.PackageScriptRunner);
+ Assert.AreEqual("A", project1.FakeReinstallPackageActionsCreated[0].PackageId);
+ Assert.AreEqual("B", project1.FakeReinstallPackageActionsCreated[1].PackageId);
+ Assert.AreEqual("A", project2ReinstallAction.PackageId);
+ Assert.AreEqual("1.1", project1.FakeReinstallPackageActionsCreated[0].PackageVersion.ToString());
+ Assert.AreEqual("1.2", project1.FakeReinstallPackageActionsCreated[1].PackageVersion.ToString());
+ Assert.AreEqual("1.4", project2ReinstallAction.PackageVersion.ToString());
+ Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[0].AllowPrereleaseVersions);
+ Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[1].AllowPrereleaseVersions);
+ Assert.IsFalse(project2ReinstallAction.AllowPrereleaseVersions);
+ Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[0].UpdateDependencies);
+ Assert.IsFalse(project1.FakeReinstallPackageActionsCreated[1].UpdateDependencies);
+ Assert.IsFalse(project2ReinstallAction.UpdateDependencies);
+ Assert.AreEqual("Test", fakeConsoleHost.PackageSourcePassedToGetActivePackageSource);
+ Assert.AreEqual(fakeConsoleHost.FakePackageRepository, fakeSolution.SourceRepositoryPassedToGetProjects);
+ }
+
+ [Test]
+ public void ProcessRecord_ReinstallAllPackagesInAllProjects_ReinstallOperationStartedAndDisposedForEachPackage()
+ {
+ CreateCmdletWithActivePackageSourceAndProject();
+ AddPackageSourceToConsoleHost();
+ SetSourceParameter("Test");
+ cmdlet.Reinstall = true;
+ FakePackageManagementProject project1 = fakeSolution.AddFakeProject("Project1");
+ FakePackageManagementProject project2 = fakeSolution.AddFakeProject("Project2");
+ ProjectHasPackageInstalled(project1, "B", "1.2");
+ ProjectHasPackageInstalled(project2, "B", "1.3");
+ var operationAwareRepository1 = new FakeOperationAwarePackageRepository();
+ project1.FakeSourceRepository = operationAwareRepository1;
+ var operationAwareRepository2 = new FakeOperationAwarePackageRepository();
+ project2.FakeSourceRepository = operationAwareRepository2;
+
+ RunCmdlet();
+
+ operationAwareRepository1.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
+ operationAwareRepository2.OperationsStarted.Single().AssertOperationWasStartedAndDisposed(RepositoryOperationNames.Reinstall, "B");
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
index 63a893e46c..4492f3f264 100644
--- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
+++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
@@ -87,6 +87,7 @@
+
@@ -231,6 +232,7 @@
+
@@ -241,6 +243,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
index 4d67256c08..d0303cee9f 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
@@ -213,5 +213,14 @@ namespace ICSharpCode.PackageManagement.Design
public Uri GalleryUrl { get; set; }
public bool DevelopmentDependency { get; set; }
+
+ public IFileSystem FileSystemPassedToExtractContents;
+ public string ExtractPathPassedToExtractContents;
+
+ public void ExtractContents(IFileSystem fileSystem, string extractPath)
+ {
+ FileSystemPassedToExtractContents = fileSystem;
+ ExtractPathPassedToExtractContents = extractPath;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
index a8a2f27d96..be7c5b7d5b 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs
@@ -19,7 +19,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-
using System.Runtime.Versioning;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
@@ -36,7 +35,6 @@ namespace ICSharpCode.PackageManagement.Design
public FakePackageManagementProject(string name)
{
- FakeInstallPackageAction = new FakeInstallPackageAction(this);
FakeUninstallPackageAction = new FakeUninstallPackageAction(this);
this.Name = name;
@@ -60,7 +58,6 @@ namespace ICSharpCode.PackageManagement.Design
};
}
- private FakeInstallPackageAction FakeInstallPackageAction;
public FakeUninstallPackageAction FakeUninstallPackageAction;
public FakeUpdatePackageAction FirstFakeUpdatePackageActionCreated {
@@ -74,6 +71,9 @@ namespace ICSharpCode.PackageManagement.Design
public List FakeUpdatePackageActionsCreated =
new List();
+ public List FakeReinstallPackageActionsCreated =
+ new List();
+
public string Name { get; set; }
public bool IsPackageInstalled(string packageId)
@@ -187,6 +187,13 @@ namespace ICSharpCode.PackageManagement.Design
return action;
}
+ public ReinstallPackageAction CreateReinstallPackageAction()
+ {
+ var action = new FakeReinstallPackageAction(this);
+ FakeReinstallPackageActionsCreated.Add(action);
+ return action;
+ }
+
public event EventHandler PackageInstalled;
public void FirePackageInstalledEvent(PackageOperationEventArgs e)
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs
new file mode 100644
index 0000000000..97aefa6bde
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeReinstallPackageAction.cs
@@ -0,0 +1,61 @@
+// Copyright (c) 2015 AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using ICSharpCode.PackageManagement.Scripting;
+
+namespace ICSharpCode.PackageManagement.Design
+{
+ public class FakeReinstallPackageAction : ReinstallPackageAction
+ {
+ public bool IsExecuted;
+
+ public FakePackageManagementProject FakeProject;
+
+ public FakeReinstallPackageAction()
+ : this(new FakePackageManagementProject())
+ {
+ }
+
+ public FakeReinstallPackageAction(IPackageManagementProject project)
+ : base(project, null)
+ {
+ FakeProject = project as FakePackageManagementProject;
+ }
+
+ protected override void ExecuteCore()
+ {
+ IsExecuted = true;
+ }
+
+ protected override void BeforeExecute()
+ {
+ }
+
+ protected override RunPackageScriptsAction CreateRunPackageScriptsAction(
+ IPackageScriptRunner scriptRunner,
+ IPackageManagementProject project)
+ {
+ return new RunPackageScriptsAction(
+ project,
+ scriptRunner,
+ new PackageScriptFactory(),
+ new NullGlobalMSBuildProjectCollection());
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
index 904f16ab1c..ecf8edbbd6 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
@@ -67,30 +67,30 @@ namespace ICSharpCode.PackageManagement.Design
PackageSources.Add(setting);
}
- public Dictionary> SavedSectionValues =
- new Dictionary>();
+ public Dictionary SavedSectionValues =
+ new Dictionary();
public void SetValue(string section, string key, string value)
{
SavedSectionValues.Remove(section);
- SavedSectionValues.Add(section, new KeyValuePair(key, value));
+ SavedSectionValues.Add(section, new SettingValue(key, value, false));
}
- public KeyValuePair GetValuePassedToSetValueForActivePackageSourceSection()
+ public SettingValue GetValuePassedToSetValueForActivePackageSourceSection()
{
return SavedSectionValues[RegisteredPackageSourceSettings.ActivePackageSourceSectionName];
}
- public void SetValues(string section, IList> values)
+ public void SetValues(string section, IList values)
{
SavedSectionValueLists.Remove(section);
SavedSectionValueLists.Add(section, values);
}
- public Dictionary>> SavedSectionValueLists
- = new Dictionary>>();
+ public Dictionary> SavedSectionValueLists
+ = new Dictionary>();
- public IList> GetValuesPassedToSetValuesForPackageSourcesSection()
+ public IList GetValuesPassedToSetValuesForPackageSourcesSection()
{
return SavedSectionValueLists[RegisteredPackageSourceSettings.PackageSourcesSectionName];
}
@@ -168,7 +168,7 @@ namespace ICSharpCode.PackageManagement.Design
DisabledPackageSources.Add(setting);
}
- public IList> GetValuesPassedToSetValuesForDisabledPackageSourcesSection()
+ public IList GetValuesPassedToSetValuesForDisabledPackageSourcesSection()
{
return SavedSectionValueLists[RegisteredPackageSourceSettings.DisabledPackageSourceSectionName];
}
@@ -186,7 +186,7 @@ namespace ICSharpCode.PackageManagement.Design
Sections.Add("packageRestore", items);
}
- public KeyValuePair GetValuePassedToSetValueForPackageRestoreSection()
+ public SettingValue GetValuePassedToSetValueForPackageRestoreSection()
{
return SavedSectionValues["packageRestore"];
}
@@ -203,5 +203,15 @@ namespace ICSharpCode.PackageManagement.Design
items.Add (new SettingValue("repositoryPath", fullPath, false));
Sections.Add(ConfigSectionName, items);
}
+
+ public Dictionary> SectionsUpdated =
+ new Dictionary>();
+
+ public void UpdateSections(string section, IList values)
+ {
+ SectionsUpdated.Remove(section);
+ SectionsUpdated.Add(section, values);
+ SetValues(section, values);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs
index 42b7a1c7a7..33aed84945 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepositoryExtensions.cs
@@ -31,5 +31,10 @@ namespace ICSharpCode.PackageManagement
{
return package.Repository.StartUpdateOperation(package.Id);
}
+
+ public static IDisposable StartReintallOperation(this IPackageFromRepository package)
+ {
+ return package.Repository.StartReinstallOperation(package.Id);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
index e248733459..2e8dd40f97 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs
@@ -19,8 +19,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
-
using System.Runtime.Versioning;
+
using ICSharpCode.PackageManagement.EnvDTE;
using NuGet;
@@ -63,6 +63,7 @@ namespace ICSharpCode.PackageManagement
UninstallPackageAction CreateUninstallPackageAction();
UpdatePackageAction CreateUpdatePackageAction();
UpdatePackagesAction CreateUpdatePackagesAction();
+ ReinstallPackageAction CreateReinstallPackageAction();
void RunPackageOperations(IEnumerable expectedOperations);
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
index 58dc1ccb24..7dd2c68753 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryExtensions.cs
@@ -32,5 +32,10 @@ namespace ICSharpCode.PackageManagement
{
return repository.StartOperation(RepositoryOperationNames.Update, mainPackageId, mainPackageVersion);
}
+
+ public static IDisposable StartReinstallOperation(this IPackageRepository repository, string mainPackageId = null, string mainPackageVersion = null)
+ {
+ return repository.StartOperation(RepositoryOperationNames.Reinstall, mainPackageId, mainPackageVersion);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs
index 5a07c43186..e78b65af4a 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/InstallPackageAction.cs
@@ -31,9 +31,13 @@ namespace ICSharpCode.PackageManagement
IPackageManagementEvents packageManagementEvents)
: base(project, packageManagementEvents)
{
+ DependencyVersion = DependencyVersion.Lowest;
+ OpenReadMeText = true;
}
public bool IgnoreDependencies { get; set; }
+ public DependencyVersion DependencyVersion { get; set; }
+ public bool OpenReadMeText { get; set; }
protected override IEnumerable GetPackageOperations()
{
@@ -48,5 +52,13 @@ namespace ICSharpCode.PackageManagement
OnParentPackageInstalled();
}
}
+
+ protected override IOpenPackageReadMeMonitor CreateOpenPackageReadMeMonitor(string packageId)
+ {
+ if (OpenReadMeText) {
+ return base.CreateOpenPackageReadMeMonitor(packageId);
+ }
+ return NullOpenPackageReadMeMonitor.Null;
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/NullOpenPackageReadmeMonitor.cs b/src/AddIns/Misc/PackageManagement/Project/Src/NullOpenPackageReadmeMonitor.cs
new file mode 100644
index 0000000000..606b44a3c1
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/NullOpenPackageReadmeMonitor.cs
@@ -0,0 +1,43 @@
+//
+// NullOpenPackageReadMeMonitor.cs
+//
+// Author:
+// Matt Ward
+//
+// Copyright (c) 2015 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class NullOpenPackageReadMeMonitor : IOpenPackageReadMeMonitor
+ {
+ public static readonly IOpenPackageReadMeMonitor Null = new NullOpenPackageReadMeMonitor();
+
+ public void Dispose()
+ {
+ }
+
+ public void OpenReadMeFile()
+ {
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
index 7eb872b449..5f27b13ada 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
@@ -211,5 +211,10 @@ namespace ICSharpCode.PackageManagement
public bool DevelopmentDependency {
get { return package.DevelopmentDependency; }
}
+
+ public void ExtractContents(IFileSystem fileSystem, string extractPath)
+ {
+ package.ExtractContents(fileSystem, extractPath);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
index 4e0d9a97ca..ff5fdfaf7a 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs
@@ -19,8 +19,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
-
using System.Runtime.Versioning;
+
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
@@ -211,7 +211,8 @@ namespace ICSharpCode.PackageManagement
List packages = packageManager.LocalRepository.FindPackagesById(packageId).ToList();
if (packages.Count > 1) {
throw CreateAmbiguousPackageException(packageId);
- }
+ }
+
return packages.FirstOrDefault();
}
@@ -220,5 +221,10 @@ namespace ICSharpCode.PackageManagement
string message = String.Format("Multiple versions of '{0}' found. Please specify the version.", packageId);
return new InvalidOperationException(message);
}
+
+ public ReinstallPackageAction CreateReinstallPackageAction()
+ {
+ return new ReinstallPackageAction(this, packageManagementEvents);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
index b3b34bd777..46e589f889 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageOperationsResolverFactory.cs
@@ -32,11 +32,11 @@ namespace ICSharpCode.PackageManagement
return new InstallWalker(
localRepository,
sourceRepository,
- null,
+ installAction.ProjectTargetFramework,
logger,
installAction.IgnoreDependencies,
installAction.AllowPrereleaseVersions,
- DependencyVersion.Lowest);
+ installAction.DependencyVersion);
}
public IPackageOperationResolver CreateUpdatePackageOperationResolver(IPackageRepository localRepository, IPackageRepository sourceRepository, ILogger logger, IUpdatePackageSettings settings)
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
index a537364473..1dad24b1f7 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs
@@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
+using System.Runtime.Versioning;
using ICSharpCode.PackageManagement.Scripting;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
@@ -43,6 +44,10 @@ namespace ICSharpCode.PackageManagement
public IPackageScriptRunner PackageScriptRunner { get; set; }
public bool AllowPrereleaseVersions { get; set; }
+ public FrameworkName ProjectTargetFramework {
+ get { return Project.TargetFramework; }
+ }
+
public virtual bool HasPackageScriptsToRun()
{
return false;
diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs
new file mode 100644
index 0000000000..151a0b62ad
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/ReinstallPackageAction.cs
@@ -0,0 +1,70 @@
+//
+// ReinstallPackageAction.cs
+//
+// Author:
+// Matt Ward
+//
+// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using ICSharpCode.PackageManagement;
+using NuGet;
+
+namespace ICSharpCode.PackageManagement
+{
+ public class ReinstallPackageAction : ProcessPackageAction
+ {
+ public ReinstallPackageAction(
+ IPackageManagementProject project,
+ IPackageManagementEvents packageManagementEvents)
+ : base(project, packageManagementEvents)
+ {
+ }
+
+ public bool UpdateDependencies { get; set; }
+
+ protected override void ExecuteCore()
+ {
+ UninstallPackage();
+ InstallPackage();
+ }
+
+ void UninstallPackage()
+ {
+ UninstallPackageAction action = Project.CreateUninstallPackageAction();
+ action.Package = Package;
+ action.ForceRemove = true;
+ action.RemoveDependencies = UpdateDependencies;
+ action.Execute();
+ }
+
+ void InstallPackage()
+ {
+ InstallPackageAction action = Project.CreateInstallPackageAction();
+ action.Package = Package;
+ action.OpenReadMeText = false;
+ action.IgnoreDependencies = !UpdateDependencies;
+ action.AllowPrereleaseVersions = !Package.IsReleaseVersion();
+ action.Execute();
+ }
+ }
+}
+
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt b/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt
index bb49324838..2580196a44 100644
--- a/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt
+++ b/src/AddIns/Misc/PackageManagement/RequiredLibraries/COPYRIGHT.txt
@@ -1,4 +1,4 @@
- Copyright 2010-2012 Outercurve Foundation
+ Copyright 2010-2014 Outercurve Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt b/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt
index 6370d613a4..5315d5210b 100644
--- a/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt
+++ b/src/AddIns/Misc/PackageManagement/RequiredLibraries/CREDITS.txt
@@ -1,6 +1,6 @@
NuGet Project
ASP.NET Open Source Gallery at Outercurve Foundation
-Copyright 2010 Outercurve Foundation
+Copyright 2010-2014 Outercurve Foundation
This product includes software developed at
The Outercurve Foundation (http://www.outercurve.org/).
@@ -29,4 +29,10 @@ Ninject 2.1
-----
Website: http://ninject.org/
Copyright: Copyright (c) 2010 Nate Kohari
-License: Apache 2.0
\ No newline at end of file
+License: Apache 2.0
+
+QueryInterceptor 0.2
+-----
+Website: https://github.com/davidfowl/QueryInterceptor
+Copyright: Copyright (c) 2011 David Fowler
+License: The MIT License
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll
index 95e3e435d5..d6fb3c1bf3 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/Microsoft.Web.XmlTransform.dll differ
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll
index b7366016db..7cdc512dc5 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Console.Types.dll differ
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll
index 6d403717fa..da3a305ee1 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll differ
diff --git a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe
index 9ca66594f9..324daa842c 100644
Binary files a/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe and b/src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.exe differ
diff --git a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
index 9e1f528ffa..651acc6173 100644
--- a/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
+++ b/src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
@@ -119,6 +119,7 @@
+
@@ -196,6 +197,7 @@
+
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
index e8e7176b63..518170eaf5 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeOperationAwarePackageRepository.cs
@@ -17,10 +17,9 @@
// DEALINGS IN THE SOFTWARE.
using System;
+using System.Collections.Generic;
using ICSharpCode.PackageManagement.Design;
using NuGet;
-using NUnit.Framework;
-using Rhino.Mocks;
namespace PackageManagement.Tests.Helpers
{
@@ -29,25 +28,24 @@ namespace PackageManagement.Tests.Helpers
public string OperationStarted;
public string MainPackageIdForOperationStarted;
- IDisposable Operation = MockRepository.GenerateStub();
+ PackageRepositoryOperationInfo operationInfo;
+
+ public List OperationsStarted = new List();
public IDisposable StartOperation(string operationName, string mainPackageId, string mainPackageVersion)
{
+ operationInfo = new PackageRepositoryOperationInfo(operationName, mainPackageId, mainPackageVersion);
+ OperationsStarted.Add(operationInfo);
+
OperationStarted = operationName;
MainPackageIdForOperationStarted = mainPackageId;
- return Operation;
+
+ return operationInfo.Operation;
}
public void AssertOperationWasStartedAndDisposed(string expectedOperationName, string expectedMainPackageId)
{
- Assert.AreEqual(expectedOperationName, OperationStarted);
- Assert.AreEqual(expectedMainPackageId, MainPackageIdForOperationStarted);
- AssertOperationIsDisposed();
- }
-
- void AssertOperationIsDisposed()
- {
- Operation.AssertWasCalled(o => o.Dispose());
+ operationInfo.AssertOperationWasStartedAndDisposed(expectedOperationName, expectedMainPackageId);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageRepositoryOperationInfo.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageRepositoryOperationInfo.cs
new file mode 100644
index 0000000000..1ab743f458
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PackageRepositoryOperationInfo.cs
@@ -0,0 +1,52 @@
+// Copyright (c) 2015 AlphaSierraPapa for the SharpDevelop Team
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this
+// software and associated documentation files (the "Software"), to deal in the Software
+// without restriction, including without limitation the rights to use, copy, modify, merge,
+// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
+// to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or
+// substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+using System;
+using NUnit.Framework;
+using Rhino.Mocks;
+
+namespace PackageManagement.Tests.Helpers
+{
+ public class PackageRepositoryOperationInfo
+ {
+ public PackageRepositoryOperationInfo(string operationName, string packageId, string packageVersion)
+ {
+ Operation = MockRepository.GenerateStub();
+ Name = operationName;
+ PackageId = packageId;
+ PackageVersion = packageVersion;
+ }
+
+ public IDisposable Operation { get; set; }
+ public string Name { get; set; }
+ public string PackageId { get; set; }
+ public string PackageVersion{ get; set; }
+
+ public void AssertOperationWasStartedAndDisposed(string expectedOperationName, string expectedMainPackageId)
+ {
+ Assert.AreEqual(expectedOperationName, Name);
+ Assert.AreEqual(expectedMainPackageId, PackageId);
+ AssertOperationIsDisposed();
+ }
+
+ void AssertOperationIsDisposed()
+ {
+ Operation.AssertWasCalled(o => o.Dispose());
+ }
+ }
+}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs
index ed9c06e252..49e79d11fb 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableInstallPackageAction.cs
@@ -31,6 +31,7 @@ namespace PackageManagement.Tests.Helpers
CreateOpenPackageReadMeMonitorAction = packageId => {
IOpenPackageReadMeMonitor monitor = base.CreateOpenPackageReadMeMonitor(packageId);
OpenPackageReadMeMonitor = monitor as OpenPackageReadMeMonitor;
+ NullOpenPackageReadMeMonitorIsCreated = monitor is NullOpenPackageReadMeMonitor;
return monitor;
};
}
@@ -42,5 +43,7 @@ namespace PackageManagement.Tests.Helpers
{
return CreateOpenPackageReadMeMonitorAction(packageId);
}
+
+ public bool NullOpenPackageReadMeMonitorIsCreated;
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs
index aa00862117..966740560f 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/InstallPackageActionTests.cs
@@ -484,5 +484,30 @@ namespace PackageManagement.Tests
Assert.IsFalse(fileService.IsOpenFileCalled);
Assert.IsTrue(monitor.IsDisposed);
}
+
+ [Test]
+ public void DependencyVersion_DefaultValue_IsLowest()
+ {
+ CreateAction();
+ Assert.AreEqual(DependencyVersion.Lowest, action.DependencyVersion);
+ }
+
+ [Test]
+ public void OpenReadMeText_DefaultValue_IsTrue()
+ {
+ CreateAction();
+ Assert.IsTrue(action.OpenReadMeText);
+ }
+
+ [Test]
+ public void Execute_OpenReadMeTextSetToFalse_NullOpenPackageReadmeMonitorCreated()
+ {
+ CreateAction();
+ action.OpenReadMeText = false;
+ installPackageHelper.TestPackage.Id = "Test";
+ installPackageHelper.InstallTestPackage();
+
+ Assert.IsTrue(action.NullOpenPackageReadMeMonitorIsCreated);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs
index 4d397e611d..e31fab7df1 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageFromRepositoryTests.cs
@@ -458,5 +458,18 @@ namespace PackageManagement.Tests
Assert.IsTrue(dependency);
}
+
+ [Test]
+ public void ExtractPath_WrappedPackage_WrappedPackageExtractContentsCalled()
+ {
+ CreatePackage();
+ var expectedFileSystem = new FakeFileSystem();
+ string expectedPath = @"d:\projects\test\packages";
+
+ package.ExtractContents(expectedFileSystem, expectedPath);
+
+ Assert.AreEqual(expectedFileSystem, fakePackage.FileSystemPassedToExtractContents);
+ Assert.AreEqual(expectedPath, fakePackage.ExtractPathPassedToExtractContents);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
index 1b9ca7b30a..5cfd03ed76 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
@@ -18,9 +18,6 @@
using System;
using System.Collections.Generic;
-using System.IO;
-using System.Text;
-using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
@@ -171,16 +168,16 @@ namespace PackageManagement.Tests
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
- var expectedSavedPackageSourceSettings = new List>();
- expectedSavedPackageSourceSettings.Add(new KeyValuePair("Test", "http://codeplex.com"));
+ var expectedSavedPackageSourceSettings = new List();
+ expectedSavedPackageSourceSettings.Add(new SettingValue("Test", "http://codeplex.com", false));
- IList> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
+ IList actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
[Test]
- public void PackageSources_OnePackageSourceAdded_PackageSourcesSectionDeletedFromSettings()
+ public void PackageSources_OnePackageSourceAdded_PackageSourcesSectionUpdated()
{
CreateSettings();
CreateOptions(fakeSettings);
@@ -190,9 +187,11 @@ namespace PackageManagement.Tests
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
- bool sectionDeleted = fakeSettings.IsPackageSourcesSectionDeleted;
+ IList settings = fakeSettings.SectionsUpdated[RegisteredPackageSourceSettings.PackageSourcesSectionName];
- Assert.IsTrue(sectionDeleted);
+ Assert.AreEqual(1, settings.Count);
+ Assert.AreEqual("Test", settings[0].Key);
+ Assert.AreEqual("http://codeplex.com", settings[0].Value);
}
[Test]
@@ -222,10 +221,10 @@ namespace PackageManagement.Tests
options.ActivePackageSource = packageSource;
- var expectedKeyValuePair = new KeyValuePair("Test", "http://sharpdevelop.com");
- KeyValuePair actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
+ var expectedKeyValuePair = new SettingValue("Test", "http://sharpdevelop.com", false);
+ SettingValue actualSetting = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
- Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair);
+ Assert.AreEqual(expectedKeyValuePair, actualSetting);
}
[Test]
@@ -387,9 +386,9 @@ namespace PackageManagement.Tests
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
- bool sectionDeleted = fakeSettings.IsDisabledPackageSourcesSectionDeleted;
+ IList settings = fakeSettings.SectionsUpdated[RegisteredPackageSourceSettings.DisabledPackageSourceSectionName];
- Assert.IsTrue(sectionDeleted);
+ Assert.AreEqual(0, settings.Count);
}
[Test]
@@ -403,10 +402,10 @@ namespace PackageManagement.Tests
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
- var expectedSavedPackageSourceSettings = new List>();
- expectedSavedPackageSourceSettings.Add(new KeyValuePair(packageSource.Name, "true"));
+ var expectedSavedPackageSourceSettings = new List();
+ expectedSavedPackageSourceSettings.Add(new SettingValue(packageSource.Name, "true", false));
- IList> actualSavedPackageSourceSettings =
+ IList actualSavedPackageSourceSettings =
fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
@@ -424,7 +423,7 @@ namespace PackageManagement.Tests
bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection;
- IList> actualSavedPackageSourceSettings =
+ IList actualSavedPackageSourceSettings =
fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection();
Assert.AreEqual(0, actualSavedPackageSourceSettings.Count);
}
@@ -458,10 +457,10 @@ namespace PackageManagement.Tests
options.IsPackageRestoreEnabled = true;
- KeyValuePair keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
+ SettingValue setting = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
- Assert.AreEqual("enabled", keyPair.Key);
- Assert.AreEqual("True", keyPair.Value);
+ Assert.AreEqual("enabled", setting.Key);
+ Assert.AreEqual("True", setting.Value);
}
[Test]
@@ -486,8 +485,8 @@ namespace PackageManagement.Tests
options.IsPackageRestoreEnabled = false;
- KeyValuePair keyValuePair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
- Assert.AreEqual("False", keyValuePair.Value);
+ SettingValue setting = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
+ Assert.AreEqual("False", setting.Value);
}
[Test]
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs
index 12b6e35c5d..7a7462a21d 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs
@@ -21,6 +21,7 @@ using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
+using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
@@ -366,8 +367,8 @@ namespace PackageManagement.Tests
viewModel.SaveOptions();
- KeyValuePair keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
- Assert.AreEqual("True", keyPair.Value);
+ SettingValue setting = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
+ Assert.AreEqual("True", setting.Value);
}
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
index d1de9b67d1..3addb3a428 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementProjectTests.cs
@@ -19,8 +19,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
-
using System.Runtime.Versioning;
+
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.EnvDTE;
@@ -823,9 +823,9 @@ namespace PackageManagement.Tests
CreateProject();
fakeProjectManager.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.0");
- IPackage packageFound = project.FindPackage("Test", new SemanticVersion("2.1"));
+ IPackage package = project.FindPackage("Test", new SemanticVersion("2.1"));
- Assert.IsNull(packageFound);
+ Assert.IsNull(package);
}
[Test]
@@ -845,9 +845,9 @@ namespace PackageManagement.Tests
CreateProject();
fakePackageManager.FakeLocalRepository.AddFakePackageWithVersion("Test", "1.0");
- IPackage packageFound = project.FindPackage("Test", new SemanticVersion("2.1"));
+ IPackage package = project.FindPackage("Test", new SemanticVersion("2.1"));
- Assert.IsNull(packageFound);
+ Assert.IsNull(package);
}
[Test]
@@ -873,5 +873,25 @@ namespace PackageManagement.Tests
Assert.AreEqual("Multiple versions of 'Test' found. Please specify the version.", ex.Message);
}
+
+ [Test]
+ public void FindPackage_PackageNotFoundWhenPackageIdSpecified_ExceptionThrown()
+ {
+ CreateProject();
+
+ IPackage package = project.FindPackage("Test", null);
+
+ Assert.IsNull(package);
+ }
+
+ [Test]
+ public void FindPackage_PackageNotFoundWhenPackageIdAndVersionSpecified_ExceptionThrown()
+ {
+ CreateProject();
+
+ IPackage package = project.FindPackage("Test", new SemanticVersion("1.2"));
+
+ Assert.IsNull(package);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs
index e8afd0a253..ffef5bc7b7 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/ProcessPackageActionTests.cs
@@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
+using System.Runtime.Versioning;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using ICSharpCode.PackageManagement.Scripting;
@@ -170,5 +171,17 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedException, exception);
}
+
+ [Test]
+ public void ProjectTargetFramework_ProjectTargetFrameworkIsNet40_ReturnsNet40()
+ {
+ CreateAction();
+ var expectedTargetFramework = new FrameworkName(".NETFramework, Version=v4.0");
+ fakeProject.TargetFramework = expectedTargetFramework;
+
+ FrameworkName targetFramework = action.ProjectTargetFramework;
+
+ Assert.AreEqual(expectedTargetFramework, targetFramework);
+ }
}
}
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs
new file mode 100644
index 0000000000..26b322a845
--- /dev/null
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/ReinstallPackageActionTests.cs
@@ -0,0 +1,148 @@
+//
+// ReinstallPackageActionTests.cs
+//
+// Author:
+// Matt Ward
+//
+// Copyright (c) 2014 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using ICSharpCode.PackageManagement;
+using ICSharpCode.PackageManagement.Design;
+using NuGet;
+using NUnit.Framework;
+
+namespace ICSharpCode.PackageManagement.Tests
+{
+ [TestFixture]
+ public class ReinstallPackageActionTests
+ {
+ ReinstallPackageAction action;
+ PackageManagementEvents packageManagementEvents;
+ FakePackageManagementProject project;
+
+ void CreateAction(string packageId = "MyPackage", string packageVersion = "1.2.3.4")
+ {
+ project = new FakePackageManagementProject();
+ project.AddFakeInstallOperation();
+
+ packageManagementEvents = new PackageManagementEvents();
+
+ action = new ReinstallPackageAction(project, packageManagementEvents);
+ action.PackageId = packageId;
+ action.PackageVersion = new SemanticVersion(packageVersion);
+ }
+
+ FakePackage AddPackageToSourceRepository(string packageId, string packageVersion)
+ {
+ return project.FakeSourceRepository.AddFakePackageWithVersion(packageId, packageVersion);
+ }
+
+ [Test]
+ public void Execute_PackageExistsInSourceRepository_PackageIsUninstalled()
+ {
+ CreateAction("MyPackage", "1.2.3.4");
+ FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4");
+
+ action.Execute();
+
+ Assert.IsTrue(project.FakeUninstallPackageAction.IsExecuted);
+ Assert.AreEqual(package, project.FakeUninstallPackageAction.Package);
+ }
+
+ [Test]
+ public void Execute_PackageExistsInSourceRepository_PackageIsInstalled()
+ {
+ CreateAction("MyPackage", "1.2.3.4");
+ FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4");
+
+ action.Execute();
+
+ Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
+ Assert.AreEqual(package, project.LastInstallPackageCreated.Package);
+ }
+
+ [Test]
+ public void Execute_PackageExistsInSourceRepository_PackageIsForcefullyRemovedSoItDoesNotFailIfOtherPackagesDependOnIt()
+ {
+ CreateAction("MyPackage", "1.2.3.4");
+ AddPackageToSourceRepository("MyPackage", "1.2.3.4");
+
+ action.Execute();
+
+ Assert.IsTrue(project.FakeUninstallPackageAction.ForceRemove);
+ }
+
+ [Test]
+ public void Execute_UpdateDependenciesIsFalse_PackageInstalledWithoutUpdatingDependencies()
+ {
+ CreateAction("MyPackage", "1.2.3.4");
+ AddPackageToSourceRepository("MyPackage", "1.2.3.4");
+ action.UpdateDependencies = false;
+
+ action.Execute();
+
+ Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
+ Assert.IsTrue(project.LastInstallPackageCreated.IgnoreDependencies);
+ Assert.IsFalse(project.FakeUninstallPackageAction.RemoveDependencies);
+ }
+
+ [Test]
+ public void Execute_UpdateDependenciesIsTrue_PackageInstalledWithoutIgnoringDependencies()
+ {
+ CreateAction("MyPackage", "1.2.3.4");
+ AddPackageToSourceRepository("MyPackage", "1.2.3.4");
+ action.UpdateDependencies = true;
+
+ action.Execute();
+
+ Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
+ Assert.IsFalse(project.LastInstallPackageCreated.IgnoreDependencies);
+ Assert.IsTrue(project.FakeUninstallPackageAction.RemoveDependencies);
+ Assert.IsFalse(project.LastInstallPackageCreated.AllowPrereleaseVersions);
+ }
+
+ [Test]
+ public void Execute_PackageIsPrerelease_PackageInstalledAllowingPrereleases()
+ {
+ CreateAction("MyPackage", "1.2.3-alpha1");
+ AddPackageToSourceRepository("MyPackage", "1.2.3-alpha1");
+ action.UpdateDependencies = true;
+
+ action.Execute();
+
+ Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
+ Assert.IsTrue(project.LastInstallPackageCreated.AllowPrereleaseVersions);
+ }
+
+ [Test]
+ public void Execute_PackageExistsInSourceRepository_PackageIsInstalledWithoutOpeningReadmeTxt ()
+ {
+ CreateAction("MyPackage", "1.2.3.4");
+ FakePackage package = AddPackageToSourceRepository("MyPackage", "1.2.3.4");
+
+ action.Execute();
+
+ Assert.IsTrue(project.LastInstallPackageCreated.IsExecuteCalled);
+ Assert.IsFalse(project.LastInstallPackageCreated.OpenReadMeText);
+ }
+ }
+}
+
diff --git a/src/Main/Base/Project/Util/DotnetDetection.cs b/src/Main/Base/Project/Util/DotnetDetection.cs
index 090b89ebc4..a6ae7a59e6 100644
--- a/src/Main/Base/Project/Util/DotnetDetection.cs
+++ b/src/Main/Base/Project/Util/DotnetDetection.cs
@@ -66,6 +66,12 @@ namespace ICSharpCode.SharpDevelop
return GetDotnet4Release() >= 379893;
}
+ public static bool IsDotnet46Installed()
+ {
+ // 393273 is .NET 4.6 on my Win7 machine with VS 2015 RC installed
+ return GetDotnet4Release() >= 393273;
+ }
+
///
/// Gets the .NET 4.x release number.
/// The numbers are documented on http://msdn.microsoft.com/en-us/library/hh925568.aspx
diff --git a/src/Main/GlobalAssemblyInfo.cs.template b/src/Main/GlobalAssemblyInfo.cs.template
index fc548ab079..c5d5706935 100644
--- a/src/Main/GlobalAssemblyInfo.cs.template
+++ b/src/Main/GlobalAssemblyInfo.cs.template
@@ -46,7 +46,7 @@ internal static class RevisionClass
public const string Minor = "1";
public const string Build = "0";
public const string Revision = "$INSERTREVISION$";
- public const string VersionName = "Beta 2"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1")
+ public const string VersionName = "RC"; // "" is not valid for no version name, you have to use null if you don't want a version name (eg "Beta 1")
public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$";
}