Hola buenas, pues llevo con el tema 2 días y aún no he conseguido averiguar nada de nada, todo lo que he leido y he visto se ha hecho desde WinForms, supongo que no será muy dificil adaptarlo a WPF... La cosa es esta, veréis, yo tengo un DLL (que se puede agregar como referencia a un proyecto) la cosa es que este DLL tiene siempre que estar al lado del ejecutable (.exe) para que la aplicación rule, si no lo está no se abre como sabréis.
Para mi esto de que un maldito DLL tenga que estar al lado del Exe para que se pueda ejecutar me toca mucho la moral, y bueno, pues estuve viendo por ahí metodos de como poder llamar a este dichoso DLL desde los recursos.
Y bien, tengo dos problemas, uno a rasgos generales, que me planteé nada más plantear la duda y es... que si cargo desde los recursos este dichoso DLL como se supone que Intellise va a detectar que en los recursos hay tal DLL para importarlo (Imports DLL.Dichoso), no se si me explico, esta duda, como aún no he podido ni romper la punta del iceberg, pues la dejo ahí.
Y la otra es, el problema en sí, que he buscado por internet y nada...
ILMerge por aquí, .Net Shrink por allá, pero ningún maldito tutorial en condiciones que te explique paso por paso lo que se supone que hay que hacer.
Luego está CodeProject, y StackOverFlow, que me han aportado ciertos códigos, que luego, bueno, han llegado a tener algún efecto, pero no el deseado, el que más este:
Private Sub DynaStart(ByVal sender As Object, ByVal e As StartupEventArgs) 'En winforms debería estar el tipico "Handles Me.StartUp"
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf DynamicOokii_Dialogs_Wpf
AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf DynamicIonic_Zip
End Sub
Private Function DynamicOokii_Dialogs_Wpf(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly
Dim desiredAssembly = New Reflection.AssemblyName(e.Name)
If desiredAssembly.Name = "DynaWars_Splash_Text" Then
Return Reflection.Assembly.Load(My.Resources.Ookii_Dialogs_Wpf) 'replace with your assembly's resource name
Else
Return Nothing
End If
End Function
Private Function DynamicIonic_Zip(sender As Object, e As System.ResolveEventArgs) As Reflection.Assembly
Dim desiredAssembly = New Reflection.AssemblyName(e.Name)
If desiredAssembly.Name = "DynaWars_Splash_Text" Then
Return Reflection.Assembly.Load(My.Resources.Ionic_Zip) 'replace with your assembly's resource name
Else
Return Nothing
End If
End Function
Que al menos conseguí que la aplicación se abriese sin necesidad de tener los DLLs presentes, pero, cuando llamaba alguna función de Ookii o de Ionic_Zip la app dejaba de funcionar. (Las referencias también estaban agregadas desde Proyecto -> Agregar referencia, para que Intellise si que me reconociese estos métodos, yo creo que algo estoy haciendo pero que muy mal...)
Y luego esto, que para colmo estaba en C#:
http://www.codeproject.com/Articles/528178/Load-DLL-From-Embedded-ResourceQue fue el que me dio la idea de Agregar las referencias al proyecto, a parte de subirlas a los recursos como Embedded Resource (Recurso Incrustado)
Así que nada, maestros, decidme que debo hacer para poder llevar a cabo tal hazaña... xD
Un saludo.También he leido esto, que bueno, recoge algo de la esencia de lo que yo estoy haciendo:
http://foro.elhacker.net/buscador-t381033.0.html