У меня проблема, когда у меня есть WPF UserControls, и у меня есть DLL, где этот UserControl находится в разных версиях, загруженных в сборку, UserControl больше не может найти свои ресурсы. (Может быть, потому, что они есть с тем же именем, но в разных версиях DLL версий). Любой знает, как это исправить?WPF - используйте разные версии DLL с UserControls
0
A
ответ
0
Я установил его в SharpDevelop сейчас следующим образом: https://github.com/icsharpcode/SharpDevelop/commit/b3ea4a0efb7e3b8e083f8be40ea6f7e03ff44604
0
Я нашел способ самостоятельно, изменив метод «IntializeComponent» в DLL. Это создает URI, который затем загружает XAML. Проблема в том, что в URI версия не включена! Поэтому я создал небольшое приложение, которое я вызываю после процесса компиляции, который модифицирует DLL, чтобы он включал версию String! Для этого он использует Mono.Cecil ...
Вот код:
class Program
{
static void Main(string[] args)
{
var path = Environment.CurrentDirectory;
if (args != null && args.Count() > 0)
path = args[0];
var dlls = Directory.GetFiles(path, "*.dll");
foreach (var dll in dlls)
{
bool dllChanged = false;
var ver = AssemblyName.GetAssemblyName(dll).Version;
var nm = AssemblyName.GetAssemblyName(dll).Name;
var oldTxt = "/" + nm + ";";
var newTxt = "/" + nm + ";v" + ver.ToString() + ";";
var readerParameters = new ReaderParameters {ReadSymbols = true};
var assemblyDefinition = AssemblyDefinition.ReadAssembly(dll, readerParameters);
var methodDefinition =
assemblyDefinition.MainModule.Types.SelectMany(x => x.Methods)
.Where(x => x.Name == "InitializeComponent");
foreach (var def in methodDefinition)
{
for (int n = 0; n < def.Body.Instructions.Count; n++)
{
var instr = def.Body.Instructions[n];
if (instr.OpCode == OpCodes.Ldstr && instr.Operand is string &&
((string) instr.Operand).StartsWith(oldTxt))
{
var next = def.Body.Instructions[n + 1];
if (next.OpCode == OpCodes.Ldc_I4_2)
{
var op = ((string) instr.Operand);
op = op.Replace(oldTxt, newTxt);
instr.Operand = op;
dllChanged = true;
}
}
}
}
if (dllChanged)
{
var writerParameters = new WriterParameters {WriteSymbols = true};
assemblyDefinition.Write(dll, writerParameters);
}
}
}
}
0
Подобно этому: https://stackoverflow.com/a/26689750/195275
Но ответ не требует изменения IL-код. Вы можете передать/p: AssemblyVersion в msbuild.
Смежные вопросы
- 1. Используйте разные версии dll-файла в одном приложении
- 2. Используйте две разные версии boost
- 3. WPF - UserControls очень медленно
- 4. Тестирование модуля WPF UserControls
- 5. Создание UserControls в WPF
- 6. WPF: CustomControls vs UserControls
- 7. Используйте множественные числа UserControls с разными именами и данными UserControl
- 8. Доступ к Usercontrols в WPF
- 9. WPF: Обновление UserControls после изменения
- 10. Связь между usercontrols в WPF
- 11. WPF Многопоточный пользовательский интерфейс - Usercontrols
- 12. WPF DataBinding при использовании usercontrols
- 13. Набор WPF DataContext от UserControls
- 14. привязка данных WPF через UserControls
- 15. WPF datacontext parent/child usercontrols
- 16. Создание UserControls с ViewModels в WPF
- 17. C# WPF XAML - Работа с абстрактными UserControls
- 18. WPF UserControls с различным внутренним атрибутом ItemAource
- 19. Использование памяти WPF с помощью UserControls & Printing
- 20. Ошибка версии с dll
- 21. Oracle: Используйте две разные версии EXP на одном компьютере?
- 22. Используйте разные версии пакетов Python в зависимости от используемого плагина
- 23. WPF: Как сгруппировать usercontrols в коллекцию
- 24. Android - разные ОС, разные версии
- 25. Используйте DLL генерируется IKVM
- 26. Стандартные стили WPF и UserControls - лучшие практики?
- 27. Как синхронизировать анимацию через usercontrols в WPF
- 28. MVVM WPF дизайн связанных запросов: использование UserControls
- 29. WPF: доступ ObservableCollection из разных UserControls
- 30. WPF: Нажмите на UserControls фон не срабатывает