我遇到這個問題,當我有WPF UserControls並且我有這個UserControl位於加載到Assembly中的不同版本的DLL時,UserControl無法再找到它的資源。 (也許因爲他們在那裏有相同的名稱,但在不同的版本化DLL中)任何知道如何解決它?WPF-在UserControls中使用不同版本的DLL
0
A
回答
0
0
我自己找到了一種方法,通過改變DLL中的「IntializeComponent」方法。這會構建一個URI,然後阻塞XAML。問題是,在URI中,版本不包括在內!所以我創建了一個小應用程序,我在編譯過程之後調用,修改DLL以便包含版本字符串!爲此,它使用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. 在一個應用程序中使用不同版本的DLL
- 3. 引用不同版本的Json.NET dll
- 4. 在WPF中使用ViewModel創建UserControls
- 5. 使用相同的DLL,但版本不同
- 6. 如何在引用同一dll的不同版本的應用程序中使用兩個dll?
- 7. COM對象和不同版本的DLL
- 8. c#dll綁定到不同的版本
- 9. 加載兩個不同版本的DLL
- 10. 使用以不同版本的Visual C++構建的庫/ DLL
- 11. 如何在同一應用程序中使用不同位置的同名但不同版本的dll?
- 12. 在一個應用程序中使用不同版本的dll文件
- 13. 使用不同的DLL進行調試和發佈版本
- 14. 開發一個使用不同運行時版本的Cuda DLL
- 15. 不同項目中的兩個版本的相同的DLL
- 16. 爲什麼WPF在不同版本的Windows上呈現不同?
- 17. 使用installshield替換GAC中版本相同的DLL
- 18. 如何在WPF中的usercontrols中同步動畫
- 19. 不同版本的php正在使用
- 20. 不匹配的DLL版本?
- 21. 引用項目,其中引用了不同版本的相同的dll
- 22. Winsock使用不同版本
- 23. 使用不同版本
- 24. 相同的DLL版本在不同的計算機上有所不同?
- 25. 使用不同版本的相同庫
- 26. 在同一進程中加載2個版本的相同DLL
- 27. 如何用tfs版本庫中較新版本的dll替換舊版dll
- 28. WPF - UserControls非常慢
- 29. WPF MVVM開關usercontrols
- 30. 使用腳本檢測DLL版本號