Find your dll's
בדרך כלל כשאנחנו מוסיפים reference לפרויקט שלנו, ה dll יושבים בבטחה תחת ספריית ה bin,
לפעמים אנחנו רוצים שהם ישבו במקום אחר, לדוגמא.
באחד הפרויקטים השתמשתי ב installer של vs, אחד מהתכונות המעניינות והמעצבנות שלו, זה שאי אפשר ב install אחד, להעתיק פעמיים קובץ אחד לשני תיקיות שונות.
נניח שיש לי קובץ שנקרא My.dll, ויש לי שתי אפליקציות שמשתמשות בו, אני יכול לבחור אחד מהאופציות הבאות.
-
לייצר שני install עבור כל אחד מהפליקציות, וליד כל אחד מה exe לשים את MyDll.dll
-
להשתמש ב install אחד, ולשים את שני האפליקציות באותה תיקייה
-
לייצר תיקייה שנקרא לה Common, ולשים שם את כל הקבצים המשותפים לשני האפליקציות (ולדאוג לכך, שהאפליקציות ידעו היכן נמצאים ה dll)
(במחשבה שנייה, זה דווקא נשמע הגיוני, שאם יש לי dll אחד ששני אפליקציות משתמשות בו, לשים אותו בתיקייה אחת, כדי שאם יהיו שינויים, אצטרך להחליף רק במקום אחד)
בכל מקרה, נחזור למה שדברנו.
אנחנו מחפשים דרך לשים dll במקום אחר מתיקיית ה bin,
-
אפשר לשים אותו ב
gac, (נניח שאנחנו לא רוצים להשתמש בדרך הזאת)
-
-
Probing, יעזור לנו רק אם אנחנו רוצים לשים את ה dll בספריות מקוננות בתוך ה bin, (מה שלא פותר לנו את הבעייה המתוארת למעלה) וזה נראה כך:
1 <runtime>
2 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
3 <probing privatePath="bin;bin2\subbin;bin3"/>
4 </assemblyBinding >
5 </runtime>
עם AssemblyBinding אפשר לתת כל נתיב של קובץ,כל עוד יש לו StrongName
1 <runtime>
2 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
3 <dependentAssembly>
4 <assemblyIdentity name="NyDll"
5 publicKeyToken="89845dcd8080cc91"
6 culture="neutral" />
7 <codeBase version="9.0.242.0"
8 href="file://C:/Program Files/MyApp/Common/MyDll.dll">
9 </codeBase>
10 </dependentAssembly>
11 </assemblyBinding >
12 </runtime>