PDA

View Full Version : استفاده از resourceهای یک پروژه Class Library در برنامه



zrahimic
پنج شنبه 03 اردیبهشت 1388, 12:41 عصر
سلام.
من میخوام یه فایل Cursor که در یک پروژه Class Library وجود دارد، در برنامه خودم استفاده کنم.
با استفاده از روشهای موجود نتوانستم.
مثلا:



Assembly ocExeAsm = Assembly.GetExecutingAssembly().GetManifestResourc eStream("Prj.Resources.051.cur"))



کسی میدونه چطوری میشه این کار رو انجام داد؟

prankster
پنج شنبه 03 اردیبهشت 1388, 13:21 عصر
Assembly assemb = Assembly.GetExecutingAssembly();
Stream myCursorStream = assemb.GetManifestResourceStream(this.GetType().Na mespace + ".Resources.051.cur");
Cursor myCursor = new Cursor(myCursorStream);


در صورتی که namespace مربوط Class Library را می دانید آن را به جای this.GetType().Namespace قرار دهید

zrahimic
شنبه 05 اردیبهشت 1388, 10:22 صبح
از راهنماییتون ممنون، ولی خطای زمان کامپایل میده. چون ورودی این تابع یک رشته است.

من به صورت زیر هم نوشتم، ولی لود نمیکنه:




Assembly assemb = Assembly.GetExecutingAssembly();
Stream myCursorStream = assemb.GetManifestResourceStream("MyNamespace.Resources.051.cur");
Cursor myCursor = new Cursor(myCursorStream);

JaguarXF
شنبه 05 اردیبهشت 1388, 10:30 صبح
add reference کردید؟

zrahimic
یک شنبه 06 اردیبهشت 1388, 11:29 صبح
بله add reference هم کردم.

prankster
یک شنبه 06 اردیبهشت 1388, 12:20 عصر
namespace هاي زير را add كرده ايد؟


using System.Reflection;
using System.IO;


در غير اين صورت error زمان compile نمي دهد.

در مورد error زمان اجرا، پارامتر ورودي GetManifestResourceStream رشته اي است كه آدرس فايل RESOURCE را به صورت syntax شبيه OOP بيان مي كند كه فرمت آن به صورت زير است:

[namespace].[resource folder1].[resource folder2].[resource file]

مثلا در مورد پست شما بايد فايل 051.cur در پوشه Resources وجو داشته باشد و Build Action آن بر روي Embedded Resource باشد. namspace پروژه بايد MyNamespace باشد

zrahimic
سه شنبه 08 اردیبهشت 1388, 12:20 عصر
من تمام فرمایشات شما رو قبلا انجام دادم ولی این روش تنها در صورتی جواب میده که فایل کرسر در Resource های پروژه اصلی اضافه شده باشد. اگر این فایل در یک پروژه ی Class Library اضافه شده باشه در پروژه ی اصلی مقدار null برگردانده میشود و فایل لود نمیشه.

prankster
سه شنبه 08 اردیبهشت 1388, 14:18 عصر
پروژه ی اصلی مقدار null برگردانده میشود و فایل لود نمیشه
دقيقا!
شما در Assembly جاري resource را جستجو مي كنيد. به كد قبل نگاه كنيد:

Assemblyassemb = Assembly.GetExecutingAssembly();


اين كد يك reference به Assembly پروژه جاري است. در صورتي كه Assembly‌ مورد نظر شما در پروژه موجود است مي توانيد از دستور زير استفاده كنيد:

Assemblyassemb = Assembly.GetAssembly(typeof(yourType));


اگر Assembly به عنوان يك فايل خارجي مطرح است مي توانيد آنرا در زمان اجرا load كنيد:

Assemblyassemb = Assembly.LoadFrom("assembly.dll");