<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET Framework</title><link>https://www.dotnetzone.gr:443/cs/forums/14/ShowForum.aspx</link><description>Θέματα για threading, remoting, reflection, exception handling, security, regex κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54149.aspx</link><pubDate>Thu, 01 Oct 2009 01:21:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54149</guid><dc:creator>papageorge</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54149.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54149</wfw:commentRss><description>&lt;P&gt;Για σας,&lt;/P&gt;
&lt;P&gt;Καταρχήν εγώ ευχαριστώ για τις εκτενείς απαντήσεις που δίνετε!&lt;/P&gt;
&lt;P&gt;Το isolation Από ότι έχω καταλάβει έχει να κάνει με την απομόνωση του add-in από το κυρίως πρόγραμμα ώστε αυτό να μην μπορεί να το επιρεάσει (Δηλ θέμα security). Αυτό όμως δεν&amp;nbsp;είναι υποκειμενικό; Δηλ το τι θα αφήσεις ένα add in να κάνει και τι όχι; Πως μπορεί να σου το προσφέρει&amp;nbsp;αυτή τη δυνατότητα&amp;nbsp;ένα έτοιμο framework;&lt;/P&gt;</description></item><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54068.aspx</link><pubDate>Tue, 29 Sep 2009 19:19:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54068</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54068.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54068</wfw:commentRss><description>&lt;P&gt;Υ.Γ. Να 'σαι καλά papageorge, είχε καιρό να ξεκινήσει τόσο ενδιαφέρον post στο DNZ. Κάτι μου λέει ότι αυτό το thread θα τραβήξει καιρό. Μάλιστα λέω να μεταφέρω τη συζήτηση στα θέματα αρχιτεκτονικής, καθώς το θέμα έχει βάθος, εύρος και είμαστε και σε φάση εξελίξεων (βλ. MEF)&lt;/P&gt;</description></item><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54066.aspx</link><pubDate>Tue, 29 Sep 2009 19:15:23 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54066</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54066.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54066</wfw:commentRss><description>&lt;P&gt;(&lt;A href="mailto:#^$@(*&amp;amp;^#(*&amp;amp;^$"&gt;#^$@(*&amp;amp;^#(*&amp;amp;^$&lt;/A&gt;#(*&amp;amp;@ β μόλις έχασα τις 3 σελίδες που είχα γράψει!&lt;/P&gt;
&lt;P&gt;Το θέμα του extensibility μίας εφαρμογής έχει πολλές παραμέτρους. Isolation μεταξύ host application και modules, ασφάλεια, versioning, ταχύτητα, εντοπισμός των addins, lifecycle (πότε φορτώνω-σκοτώνω το&amp;nbsp;addin)&amp;nbsp;κλπ. Γι αυτό και η απλοϊκή λύση του "το κάνω μόνος μου" μπορεί να οδηγήσει σε προβλήματα.&lt;/P&gt;
&lt;P&gt;Πολύ επιγραμματικά, υπάρχουν 3 κατηγορίες λύσεων:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Να χρησιμοποιήσεις κάποιο μηχανισμό addin όπως το MEF ή το &lt;A href="http://msdn.microsoft.com/en-us/library/bb384241.aspx"&gt;System.AddIn&lt;/A&gt; (σύντομη περιγραφή &lt;A href="http://dotnetmafia.com/blogs/anthonykilhoffer/archive/2008/10/06/using-the-system-addin-namespace-to-facilitate-extensibility.aspx"&gt;εδώ&lt;/A&gt;, samples - tools &lt;A href="http://clraddins.codeplex.com/"&gt;εδώ&lt;/A&gt;) το οποίο παρέχεται από το .NET 3.5. Το MEF είναι ευκολότερο στη χρήση, το System.AddIn θέλει λίγο κώδικα με το χέρι αλλά έρχεται με το runtime.&lt;BR&gt; Είναι κατάλληλα όταν ξέρεις χονδρικά τί θα κάνει το addin σου, πχ. spell checking, νέος αλγόριθμος κλπ.&lt;BR&gt; Παρέχουν isolation μεταξύ εφαρμογής και addins, μηχανισμούς εντοπισμού και φορτώματος των addin, lifecycle management (πότε ανεβαίνει-πέφτει το addin), versioning (επικοινωνία διαφορετικών εκδόσεων εφαρμογής-addin μεταξύ τους). &lt;BR&gt;Κλασσική λύση, από τον καιρό του Photoshop 1.0 (νομίζω)&lt;/LI&gt;
&lt;LI&gt;Να χρησιμοποιήσεις κάποιο IoC container όπως τα &lt;A href="http://unity.codeplex.com/"&gt;Unity&lt;/A&gt;, &lt;A href="http://www.castleproject.org/container/index.html"&gt;Castle Windsor&lt;/A&gt;, &lt;A href="http://www.springframework.net/"&gt;Spring.NET&lt;/A&gt;. Δεν παρέχουν isolation κλπ αλλά γενικά είναι ευκολότερα στη χρήση. Και πάλι είναι κατάλληλα όταν η εφαρμογή σου ξέρει τί περιμένει να βρει στα addins. Συνήθως ορίζεις τα addin σε κάποιο config file, αλλά είναι εύκολο να φορτώσεις π.χ. όλα τα διαθέσιμα addin γράφοντας λίγο παραπάνω κώδικα.&lt;BR&gt;Κατάλληλο όταν θέλεις να φτιάξεις ένα απλό και γρήγορο μηχανισμό addin και είσαι σίγουρος ότι δεν θα χρειαστείς isolation κλπ.&lt;/LI&gt;
&lt;LI&gt;Να χρησιμοποιήσεις ένα extensibility framework όπως το &lt;A href="http://compositewpf.codeplex.com"&gt;Prism&lt;/A&gt; ή το &lt;A href="http://www.devexpress.com/Products/NET/Application_Framework"&gt;XAF&lt;/A&gt;, τα οποία περικλείουν ολόκληρους τομείς functionality σε modules, με τις φόρμες, μενού, κώδικα που απαιτούν. Ουσιαστικά η εφαρμογή μετατρέπεται σε host των modules, κάτι που επιτρέπει να αναπτύξεις κάθε module ανεξάρτητα αλλά και να δημιουργήσεις διαφόρους συνδυασμούς modules&lt;BR&gt;Κατάλληλο για περίπλοκες εφαρμογές, π.χ. ERP, CRM και όπου χρειάζεται ή μπορεί να σπάσει η εφαρμογή σε ανεξάρτητα modules. Η μόδα του παρόντος και μέλλοντος σε αυτό τον τομέα.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Την περίπτωση να γράψεις με το χέρι τον κώδικα για να φορτώνεις τα dll, να ψάχνεις τα interfaces κλπ δεν θα τη συνιστούσα σε καμμία περίπτωση. Θα αντιμετωπίσεις προβλήματα τα οποία είναι ήδη λυμμένα, ενώ είναι σίγουρο ότι&amp;nbsp;όσο ασχολείσαι π.χ. με το σκάσιμο του host, θα σου ξεφύγουν σημαντικά θέματα όπως το isolation και το performance. Σίγουρα έχει ενδιαφέρον να ασχοληθείς με αυτά τα θέματα σαν χόμπυ, όχι όμως όταν σε κυνηγούνε deadlines και αφεντικά.&lt;/P&gt;
&lt;P&gt;Η επιλογή σου εξαρτάται από τις απαιτήσεις της εφαρμογής σου. Πριν επιλέξεις λύση θα πρέπει να σκεφτείς και να αναλύσεις (ή να μας πεις) τί απαιτήσεις θα έχει η εφαρμογή σου και μετά να δεις τί λύση ταιριάζει.&lt;/P&gt;</description></item><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54063.aspx</link><pubDate>Tue, 29 Sep 2009 18:19:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54063</guid><dc:creator>Johnnyxp64</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54063.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54063</wfw:commentRss><description>&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;P&gt;@pk&lt;/P&gt;&lt;P&gt;η εφαρμογή δεν σκάει ακριβώς γιατί &lt;STRONG&gt;ΔΕΝ&lt;/STRONG&gt; βρίσκει "άσχετα" dll και οσα βρίσκει εχουν ολα την απαραίτητη class plugin και κάνουν αυτό που πρέπει να κάνουν χωρίς "κωδικοβολτες".. και αυτο πολύ απλά γιατί περιορίζω την "έρευνα" σε συγκεκριμένη ονομασία αρχείων name...*.dll.&lt;/P&gt;&lt;P&gt;Πιστεύω το να έψαχνα Ολα τα dll ενα-ενα AN "υλοποιεί κάποιο συγκεκριμένο interface " θα καθυστερούσα περισσότερο γιατί άλλο να κοιτάς σε 10 αρχεία και αλλο σε 30 εκ των οποίων μονο τα 10 θες.&lt;/P&gt;&lt;P&gt;αν τώρα ο τρόπος που λες δεν επιβαρύνει χρονικά την εφαρμογή κι αν εχεις καποια συγκεκριμένη διόρθωση πάνω στον συγκεκριμένο κώδικα να δείξεις - εξηγήσεις ευχαρίστως να το δω και να το υιοθετήσω αν μου κάνει και ετσι να "απαντήσεις" και στο ερώτημα του φίλου / topic .&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-42.gif" alt="Confused" /&gt;&lt;/P&gt;&lt;P&gt;Ευχαριστώ.&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-21.gif" alt="Yes" /&gt;&lt;/P&gt;&lt;P&gt;&lt;BR&gt;&lt;/P&gt;&lt;P&gt;ΥΓ Τελος να πω κι εγω στον φιλο που ρωτα οτι ειναι οπως το λεει ο KelMan πρεπει η όλη φιλοσοφία σου να ειναι σωστή ώστε τα dll σου να κοιτανε προς την κοινή εφαρμογή και να ειναι ολα σωστα "κοματιασμενα" για να δενουν μεταξυ τους και να εναλλάσσονται πληροφορίες, για παράδειγμα ισως μέσω ενος κοινού αντικείμενου..&lt;/P&gt;&lt;P&gt;                                                                  |___________________&amp;gt;Customers object&lt;BR&gt;APPLICATION-------------&amp;gt;Common object----------|&lt;BR&gt;                                                                  |___________________&amp;gt;Products object&lt;/P&gt;</description></item><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54057.aspx</link><pubDate>Tue, 29 Sep 2009 15:35:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54057</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54057.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54057</wfw:commentRss><description>&lt;P&gt;Γενικά, αυτό που ζητάς δεν είναι και τόσο απλό πράγμα. Το δύσκολο δεν είναι τόσο στον μηχανισμό, όσο στο να σχεδιάσεις εκ των προτέρων κατά τέτοιο τρόπο την εφαρμογή σου ώστε το μελλοντικό plugin που θα γράψεις να μπορεί να έχει πρόσβαση στο functionality και στο state των data αυτού που τρέχει ως instance της εφαρμογής. Μιλάμε δηλαδή να σχεδιάσεις την εφαρμογή σου ώστε να βασίζεται σε ένα object model. Αν δεν το κάνεις αυτό, η επικοινωνία θα ειναι υποχρεωτικά πάντοτε από την εφαρμογή προς το plugin αλλά ποτέ από το plugin προς την εφαρμογή. Φαντάσου το κάπως έτσι: Θα ανοίγεις το dll, θα φτιάχνεις ένα instance από κάποιο object και θα καλείς κάποια μέθοδο. Αν δεν έχεις ξεχωρίσει το business logic της εφαρμογής σε ξεχωριστά objects ώστε να μπορείς να τα περάσεις στη μέθοδο που καλείς, τότε θα είναι περιορισμένα αυτά που θα μπορείς να κάνεις στο plugin.&lt;/P&gt;
&lt;P&gt;Τώρα, ως προς τον μηχανισμό, αν ξεκινάς κάτι σήμερα, καλό θα είναι να κοιτάξεις αυτό &lt;A href="http://www.codeplex.com/MEF"&gt;http://www.codeplex.com/MEF&lt;/A&gt;&amp;nbsp;Θα έρθει με το .NET Framework 4 ωστόσο δεν σε εμποδίζει τίποτα να το χρησιμοποιήσεις από τώρα. &lt;/P&gt;
&lt;P&gt;Από την άλλη, αν θες να φτιάξεις κάτι δικό σου που να ελέγχεις τον κώδικα, ένα καλό ξεκίνημα είναι εδώ &lt;A href="http://msdn.microsoft.com/en-us/library/ms972962.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms972962.aspx&lt;/A&gt;&amp;nbsp;(και η συνέχειά του - για να ξεφορτωθείς τα config αρχεία - εδώ &lt;A href="http://weblogs.asp.net/rosherove/pages/Add-Plugins-to-Your-App-2_3A00_-Search-dynamically-for-plugins-without-Config-Files.aspx"&gt;http://weblogs.asp.net/rosherove/pages/Add-Plugins-to-Your-App-2_3A00_-Search-dynamically-for-plugins-without-Config-Files.aspx&lt;/A&gt;)&lt;/P&gt;</description></item><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54055.aspx</link><pubDate>Tue, 29 Sep 2009 09:26:13 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54055</guid><dc:creator>Panagiotis Kefalidis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54055.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54055</wfw:commentRss><description>Έτσι όπως το έχει γράψει είναι λογικό να σκάει η εφαρμογή όταν βρίσκει άσχετα dll γιατί απλά το έχεις υλοποιήσει με λάθος λογική. Θα μπορούσες απλά να κοιτάς μέσα στο dll εάν υλοποιεί κάποιο συγκεκριμένο interface πχ IAppPlugin ώστε να φορτώσεις μόνο αυτά τα οποία όντως είναι plugins. Ακόμα πιο "απλά" θα μπορούσες να έχεις custom metadata attribute το οποίο υποδηλώνει ότι είναι plugin ή όχι. Αν και βέβαια το να φτιάξεις μια καινούργια page σε ribbon ή ένα κουμπί, είναι εύκολο. Το δύσκολο είναι να μην πηγαινείς βόλτα όλο τον κώδικα που θες να τρέξει και κάνεις bundle ολόκληρες φόρμες μέσα στο .dll κλπ κλπ και να επαλαμβάνεις τον ίδιο και τον ίδιο κώδικα σε κάθε plugin.</description></item><item><title>Απ: Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54048.aspx</link><pubDate>Tue, 29 Sep 2009 07:06:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54048</guid><dc:creator>Johnnyxp64</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54048.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54048</wfw:commentRss><description>&lt;P&gt;Καλος ηλθες φιλε.&lt;/P&gt;&lt;P&gt;&lt;BR&gt;&lt;/P&gt;&lt;P&gt;εχω κανει Ακριβως αυτο που θες για την ERP εφαρμογή μου το εχω παει ακομα παραπερα βεβαια, "ανοίγω" τα dll kai ψάχνω για κλαση με ονομα "plugin.vb" και εκτελω μεσα στη μεθοδο NEW  ενα αλλο function και φτιαχνω και δυναμικά Ribbon Toolbars για την εφαρμογή, δηλαδη κτίζω το UI.Αν για παράδειγμα εχω το αρχειο ERP_Customers.dll στο φακελο της εφαρμογης τοτε θα δω και το αναλογο κουμπι στο interface "Πελατες" και φερνω τα controls / forms που θελω για την ενοτητα αυτη.&lt;/P&gt;&lt;P&gt;Για να γινει αυτο ποιο σωστα καλο θα ηταν να εχεις ενα συγκεκριμένο ονομα αρχειων που θα ειναι plugins.dll και να μην σκασει ο κωδικας οταν θα βρησκει και "ασχετα" .dll&lt;/P&gt;&lt;P&gt;παραθετω το κωδικα μου γραφω σε vb.net&lt;/P&gt;&lt;P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color:#f2f2f2;border:solid 1px #e5e5e5;"&gt;&lt;TR style="vertical-align:top;line-height:normal;"&gt;&lt;TD style="width:40px;text-align:right;"&gt;&lt;PRE style="font-family:courier new;font-size:11px;color:gray;margin:0px;padding:2px;border-right:solid 1px #e7e7e7;"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 &lt;/PRE&gt;&lt;/TD&gt;&lt;TD&gt;&lt;PRE style="margin:0px;padding:2px;padding-left:8px;"&gt;&lt;SPAN style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Sub&lt;/SPAN&gt; GetDLLS()
&lt;BR&gt;        &lt;SPAN style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'skip error for dlls that have similar name but are not plugins!&lt;/SPAN&gt;
        &lt;SPAN style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'On Error Resume Next '''for testing&lt;/SPAN&gt;
        &lt;SPAN style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'search into the application directory for specific DLL names and and later creat dynamically a new RibonPage in the main UI.&lt;/SPAN&gt;
        &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; DLLlist &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;New&lt;/SPAN&gt; List(Of &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;String&lt;/SPAN&gt;)
        &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; DLLpath &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;New&lt;/SPAN&gt; IO.DirectoryInfo(My.Application.Info.DirectoryPath)
        &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; DLLfiles &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; FileInfo() &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/SPAN&gt; DLLpath.GetFiles(&lt;SPAN style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"MyApplicationName_*.dll"&lt;/SPAN&gt;)
        &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;For&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Each&lt;/SPAN&gt; FileInfo &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;In&lt;/SPAN&gt; DLLfiles
            &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;If&lt;/SPAN&gt; &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Not&lt;/SPAN&gt; DLLlist.Contains(FileInfo.FullName) &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Then&lt;/SPAN&gt;
                DLLlist.&lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Add&lt;/SPAN&gt;(FileInfo.FullName)
                &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; A &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Assembly&lt;/SPAN&gt; &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Assembly&lt;/SPAN&gt;.LoadFrom(FileInfo.FullName)
                &lt;SPAN style="color:Green;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;'search for the class named Plugin and execute the code from the method NEW&lt;/SPAN&gt;
                &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; ClassName &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;String&lt;/SPAN&gt; &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/SPAN&gt; Microsoft.VisualBasic.&lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Left&lt;/SPAN&gt;(FileInfo.Name, FileInfo.Name.Length &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;-&lt;/SPAN&gt; 4) &amp;amp; &lt;SPAN style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;".Plugin"&lt;/SPAN&gt;
                &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; Plugin &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Object&lt;/SPAN&gt; &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/SPAN&gt; A.CreateInstance(ClassName, &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;True&lt;/SPAN&gt;)
                &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Dim&lt;/SPAN&gt; T &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;As&lt;/SPAN&gt; Type &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/SPAN&gt; Plugin.GetType()
                T.GetMethod(&lt;SPAN style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"New"&lt;/SPAN&gt;, BindingFlags.&lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Public&lt;/SPAN&gt; &lt;SPAN style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Or&lt;/SPAN&gt; BindingFlags.Instance)
            &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;End&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;If&lt;/SPAN&gt;
        &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Next&lt;/SPAN&gt;

&lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;End&lt;/SPAN&gt; &lt;SPAN style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Sub&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Δυναμικό φόρτωμα dll αρχείων</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/54047.aspx</link><pubDate>Tue, 29 Sep 2009 04:44:44 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:54047</guid><dc:creator>papageorge</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/54047.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=14&amp;PostID=54047</wfw:commentRss><description>Για σας,&lt;br&gt;&lt;br&gt;Έρχομαι από την java για αυτό θα ήθελα μια βοήθεία σε σχέση με τις κλασεις στο .net.Αυτό&amp;nbsp; που χρειάζεται να κάνω είναι να δώσω μια δυνατότητα επεκτασιμότητας στο πρόγραμμα μου. Η εφαρμογή με την οποία ασχολούμαι θα μπορούσε να συγκριθεί με ένα παιχνίδι στο οποίο αν θέλει κάποιος μπορεί να προσθέσει πχ ένα καινούργιο χαρακτήρα ή ένα όπλο χωρίς απαραίτητα να χρειάζεται να ξανακάνει compile τον κώδικα. Δηλ. να μπορεί να γράφει μια κλάση (πχ μέσα σε dll) , να τη βάζει σε ένα φάκελο ή να την προσθέτει με κάποιο τρόπο κατά την εκτέλεση του προγράμματος και στην συνέχεια αυτή να ενσωματώνεται στο παιχνίδι. Ο κώδικας που γράφω είναι σε visual basic.net&lt;br&gt;&lt;br&gt;Ευχαριστώ&amp;nbsp; &lt;br&gt;</description></item></channel></rss>