Ich verwende Emit, um einige dynamische Typen in meinem Projekt zu erstellen, insbesondere um "Decorators" um meine Service-Interfaces zu ersetzen. Ich mache das auch für die Klasse, die bei .NET Remoting als WellKnownServiceType registriert ist. Jedoch scheint .Net Remoting mit dynamisch emittierten Typen nicht sehr gut zu funktionieren. Zuerst bekam ich:Probleme beim Registrieren eines dynamischen Typs in einem .Net Remoting-Dienst
System.IO.FileNotFoundException: Could not load file or assembly 'Dynamic, Version=0.0.0.0, Culture=neutral, PublicKeyToken=XXXX' or one of its dependencies. The system cannot find the file specified.
Natürlich ist die Datei nicht existiert, wobei die Baugruppe ist dynamisch, und ich habe Emit auf nur „Run“ der Versammlung, nicht SaveAndRun.
Also, bevor ich den Typ registrieren, rufe ich eine Assembly.Load (type.Assembly.GetName()). Jetzt , erhalte ich:
System.Runtime.Remoting.RemotingException: Requested Service not found
Server stack trace:
at System.Runtime.Remoting.Channels.BinaryServerFormatterSink.ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders, Stream& responseStream)
Der Fehler erscheint nur auf der Client-Seite als eine Ausnahme vom Server. Ich sehe keine Fehler in den Serverprotokollen.
Jeder hat Hinweise darauf, ob dies ein "bekanntes" Problem ist, dass dynamische Typen nicht verwendet werden können, um .net Remoting-Dienste zu hosten? Irgendwelche Hinweise oder Hinweise um es zu umgehen?
** UPDATE * *** Ich habe mit Emit gestoppt. Emit hat mich gezwungen, ein "InternalsVisibleTo" -Attribut in meine Kern-Assemblies zu schreiben, das die Verschleierung ernsthaft beeinflusst hat. Stattdessen habe ich die Codegenerierung über den CodeDom-Namespace geändert. Es funktioniert wunderbar. Ich kann den Quellcode sehen, der den Job erledigt, was beim Debuggen sehr hilfreich ist.
Ich bin nicht sicher, ob AssemblyResolve mit dynamisch "emittierten" Baugruppen arbeitet. –