PDA

View Full Version : سوال: یک مشکل در ساخت dll یک جور کامپوننت



RoostaYeBekr
دوشنبه 25 آذر 1387, 01:09 صبح
با سلام
این برنامه ای که فرستادم ، هر کاری می کنم ( یعنی هرچی پروژه رو Build می کنم ، از کامپوننتی که می خوام dll ساخته نمی شه ):عصبانی++:

کلافه شدم. البته من قصدم این نیست که کل پروژه ور Build کنم . بلکه می خوام کامپوننتی که ساختم رو Build کنم تا حتما به شکل dll درآد.:عصبانی++:
توی این سایت هم جستجو کردم ، به نتیجه نرسیدم.

Saber_Fatholahi
دوشنبه 25 آذر 1387, 10:29 صبح
خوب دوست من معلومه که به این طریق نمی شه باید یه پروژه از نوع Class Library ایجاد کنی بعد اونو از نو کامپایل کنی نتیجش اینه که کامپوننت می گیری البته در صورتی که سایت رو هم پاپلیش کنی فکر کنم تمام کلاس هات تبدیل به dll می شه اما روش اول به نظر بنده بهتره

RoostaYeBekr
دوشنبه 25 آذر 1387, 11:12 صبح
خوب دوست من معلومه که به این طریق نمی شه باید یه پروژه از نوع Class Library ایجاد کنی بعد اونو از نو کامپایل کنی نتیجش اینه که کامپوننت می گیری البته در صورتی که سایت رو هم پاپلیش کنی فکر کنم تمام کلاس هات تبدیل به dll می شه اما روش اول به نظر بنده بهتره
با سلام و تشکر
:شیطان:
آره می دونم که class library ، بعد از Build کردنش ، dll می ده . ولی class library که برای پروژه های ویندوزی است . من در پروژه ی وب می خواهم برای این کامپوننتم dll بسازم. من چه شکلی از یک امکانی که در پروژه ی ویندوزی است ، بیایم و در پروژه ی وب از آن استفاده کنم.

RoostaYeBekr
دوشنبه 25 آذر 1387, 12:58 عصر
خوب دوست من معلومه که به این طریق نمی شه باید یه پروژه از نوع Class Library ایجاد کنی بعد اونو از نو کامپایل کنی نتیجش اینه که کامپوننت می گیری البته در صورتی که سایت رو هم پاپلیش کنی فکر کنم تمام کلاس هات تبدیل به dll می شه اما روش اول به نظر بنده بهتره
با سلام
تازه ببین یک چیز دیگه :
اینکه می گوئید که اگر کل پروژه را پابلیش کنم :
وقتی این کار را می کنیم و بعد می خواهیم که dll اش را به برنامه اضافه کنیم ، و وقتی که choose item را می زنیم و می خواهیم dll را انتخاب کنیم ، برنامه پیغام می دهد که نمی شود .چون این کامپوننت نیست . خوب درست هم می گوید . dll ی که در هنگام پابلیش درست می شود ، به نظرم dll ی نیست که مفهوم کامپوننت را داشته باشد.

حالا با تمام این اوصاف من dll ی برای ساخت کامپوننت می خواستم .

RoostaYeBekr
سه شنبه 26 آذر 1387, 15:37 عصر
با سلام
:گریه:
:گریه:
:گریه:
چرا کسی به این سوال پاسخ نمی ده؟
:عصبانی++:
:عصبانی++:
:عصبانی++:

mahdi_farhani
چهارشنبه 27 آذر 1387, 15:31 عصر
calssLibrary کار نداره که برای ویندوز میخواهی یا وب . فقط کافی ریفرنسهای لازم را بهش اضافه کنی .

RoostaYeBekr
چهارشنبه 27 آذر 1387, 21:14 عصر
calssLibrary کار نداره که برای ویندوز میخواهی یا وب . فقط کافی ریفرنسهای لازم را بهش اضافه کنی .

با سلام
از راهنمایی تون ممنون. ولی یک مشکلی من دارم . مگر وقتی ما می خواهیم یک پروژه ی وب ایجاد کنیم ، قیافش اینطوری نیست؟
http://www.sleezo.com/imgs/2008/dec/17/y52c.png
و همینطور وقتی می خواهیم یک پروژه ی ویندوزی ایجاد کنیم ، قیافش به شکل زیر نیست؟
http://www.sleezo.com/imgs/2008/dec/17/y52y.png
خوب وقتی که گزینه ی Class Library در پروژه ی وب من نیست ، من چه شکلی برای پروژه ی وب ، Class Library ایجاد کنم؟

حالا اصلا شما فرض کن من با همان کادری که برای پروژه ی ویندوزی ظاهر می شود ، یک Class Library ساختم و حالا می خواهم توش کدهای وب را بزنم. مشکل از همون خط اول شروع می شه : وقتی می خواهم بنویسم : using System.Web.UI; ، اصلا نمی شناسه.

تازه باز یک چیز دیگه : من قبلا یک dll الکی ساختم و می خواستم ببینم که این dll ویندوزی ، آیا در وب کار می کند یا نه . بعد از اینکه add Refrence زدم و بعد خواستم choose item کنم ، خطایی نداد ، ولی آن dll را اصلا در آن Tab نمایان نکرد.

ببخشید اگر که این بار خواستید پاسخ دهید ، یک کم جزئیاتش را بیشتر می کنید ، آخه من کلی این قضیه را امتحان کردم ، نشده . تازه توی این سایت هم که جستجو کردم ، بدبختانه تاپیک هایی که پیدا کردم ، ( طرف معلومه به نتیجه نرسیده ، ولی شاید به خاطر رو در بایستی کوتاه آمده . منظورم این است که آخرش اون تاپیک مفید نبوده )

mahdi_farhani
چهارشنبه 27 آذر 1387, 21:21 عصر
دوست عزیز ، ببین شما دو حالت دارید
1-dll هایی که به عنوان ریفرنس استفاده میشوند
2-dll هایی که به عنوان کامپوننت به تولبار اضافه میشن
اون اروری که دیدید به علت اینه که شما یک dll را ریفرنسی را خواستید به عنوان یک کنترل استفاده کنید.

اون ارور using که فرمودید با اضافه کردن refrennce مربوط به System.web حل میشه.
و بعد از اون میتونید از این dll به عنوان یک ریفرنیس استفاده کنید
و قضیه وب کنترل شما از تیمپلیت asp.net Server Control استفاده کنید تا بتونید یک کامپوننت بسازید

s_ahmadneya
چهارشنبه 27 آذر 1387, 21:37 عصر
با سلام خدمت دوستان عزیر
یکی از فرق های اصلی برنامه تحت وب و ویندوزی در اینتر فیس ان است وگرنه کلاس و شی ها ان تقریباگ یکسان است شما میتوانید از کلاس های که ساخته اید در هر دو حالت استفاده کنید. کافی است. در برنامه تحت وب کلاسی را که ساخته اید را اضافه نمایید.

RoostaYeBekr
چهارشنبه 27 آذر 1387, 23:12 عصر
با سلام
از همتون ممنون. توضیحاتتون خوب بود.

آقای mahdi_farhani (http://barnamenevis.org/forum/member.php?u=6523) گفتید :
دوست عزیز ، ببین شما دو حالت دارید
1-dll هایی که به عنوان ریفرنس استفاده میشوند
2-dll هایی که به عنوان کامپوننت به تولبار اضافه میشن
مرسی .

آقای mahdi_farhani (http://barnamenevis.org/forum/member.php?u=6523) گفتید :
اون ارور using که فرمودید با اضافه کردن refrennce مربوط به System.web حل میشه.
ببینید در حالت معمولی که می خواهیم یک Class Library درست کنیم ، همانطور که گفتم ، اصلا using System.Web.UI را نمی شناسد. آخه من از کجا Refrence مربوط به System.Web را اضافه کنم؟ ( منظورم این است که Refrence اش را از کجا بیاورم ؟ آخه من که Refrence مربوط به System.Web را نساخته ام و دست من نیست که بخواهم اضافه اش کنم)

آقای mahdi_farhani (http://barnamenevis.org/forum/member.php?u=6523) گفتید :

قضیه وب کنترل شما از تیمپلیت asp.net Server Control استفاده کنید تا بتونید یک کامپوننت بسازید
اگه زحمتی براتون نیست ، می شه راجع به اینی که گفتید ، بیشتر توضیح دهید . خیلی منظورتون رو متوجه نشدم. ( اگر منظورتون UserControl ها هست ، من این را نمی خواهم ها . من حتما dll می خواهم )

آقای s_ahmadneya (http://barnamenevis.org/forum/member.php?u=81469) گفتید:
شما میتوانید از کلاس های که ساخته اید در هر دو حالت استفاده کنید. کافی است. در برنامه تحت وب کلاسی را که ساخته اید را اضافه نمایید.
بحث خیلی خوبی کردید . من الان رفتم و یک dll با Class Library ساختم و بعد اون رو به پروژه ی وب ، Add Refrence کردم و کار هم کرد.
ولی : الان رفتم همین کلاسی که در اولین پست همین تاپیک دیدید رو به یک پروژه از نوع Class Library ، اضافه کردم ( تا بعد Build اش کنم تا برام dll بسازه ) . اما نمی گذاره و زیر using System.Web.UI خط می کشه.

mahdi_farhani
چهارشنبه 27 آذر 1387, 23:23 عصر
از منوی Project گزینه add refrence رو انتخاب کنید از برگه .net رفرنسهای System.web رو اضافه کنید.
Usercontrol و Web Control دو مبحث جدا از هم هستند
UC که خارج از این بحث هست و نیازی به توضیح اون نمیبینم.
ولی Web control ( یا همون asp.net Server control که در vs2008 هست )
زمانی که یک Project جدید میخواهید ایجاد کنید از template های موجود شما باید یکی از این دو گزینه را انتخاب کنید یا asp.net server control زمانی که از VS2008 استفاده میکنید و اگر از Vs2005 استفاده Web Control Library را انتخاب کنید . تا رفرنسها و تمپلیت پیش فرض ساخت کامپوننت براتون ایجاد بشه .

s_ahmadneya
پنج شنبه 28 آذر 1387, 07:46 صبح
شما باید این دوتا را ازهم جدا کنید یعنی اول کلاس را بسازید و dll انرا در پروژه ای که کامپونت را می خواهی بسازی استفاده کنی .دوست عزیر باید سعی کنی در کلاس هایت تا جایی ممکن از Interface استفاده نکنی تا در هر دوحالت ویندوز و وب بتونی استفاده کنی

mahdi_farhani
پنج شنبه 28 آذر 1387, 13:02 عصر
از این پروژه استفاده کن،این یک پروژه Asp net control library هست

s_ahmadneya
پنج شنبه 28 آذر 1387, 13:40 عصر
با سلام و تشکر
ببین ، من همین کاری که می گید کردم. یعنی اون کلاسم و برداشتم و بردم توی class Library تا ازش dll بسازم. بعد که خواستم dll اش را به برنامه اضافه کنم ، پیغام داد که این کامپوننت نیست که بتوانی اضافه اش کنی. ( آخه می دونی این به این کلاسی که ساختم ، به چشم همون کلاس نگاه می کنه . حالا نمیاد بررسی کنه که ماهیتش کامپوننته )
بعد گفتید:

لطف می کنید بگوئید منظورتون از Interface در این ، موضوع ، کدام Interface است؟

منظورم ظاهر برنامه است همان چیزی که با کاربر ارتباط برقرار می کنه همان فرم ها.اصولا" فرمهای ویندوزی و تحت وب ماهیتی کاملا" متفاوت دارند(interface user)

RoostaYeBekr
پنج شنبه 28 آذر 1387, 13:59 عصر
با سلام
بچه ها من قبل از اینکه دو پست آخرتون ، ( آقای مهدی و آقای سعید ) را بخوانم ، با استفاده از راهنمایی های قبلیتون ، به جوابی که می خواستم ، رسیدم. دست هر دوتون درد نکنه.:تشویق:

خیلی ممنون.الان می روم بازش می کنم. حالا جالبه من الان رفتم ، این برنامه ی ServerControl1.rar تان را دانلود کردم ، ولی زده : 0 دیدار.

RoostaYeBekr
پنج شنبه 28 آذر 1387, 15:46 عصر
با سلام
بچه ها هر کی مثل من این مشکل رو داشت ، باید کارهای زیر رو انجام بده:

1 – پروژه ی جدید : File >> New Project
2- ساخت dll : انتخاب WindowsControlLibrary
3 – اضافه کردن کلاس مورد نظر به WindowsControlLibrary
4 – انتخاب گزینه ی Project >> Add Refrence
5 – انتخاب Tab مربوط به .NET
6 – اضافه کردن Refrence های لازم ( من System.Web را انتخاب کرده و OK کردم )
7 – Build کردن پروژه

و پس از طی چهار مرحله ی بالا ، dll ساخته می شه.

8 – بعد یک پروژه ی وب جدید درست کنید و dll ساخته شده در مرحله ی قبل را add Refrence کنید ( به پروژه ی جدید )
9 – حالا به قسمت در ToolBox ، یک Tab جدید مثلا به نام MyDll ایجاد کنید و بعد پس از انتخاب choose Item ، dll ی را که قبلا به همین پروژه ، add Refrence کردید ، را انتخاب کنید تا کلاس مورد نظرتان به ToolBox اضافه شود.
10- حالا پس از اینکه کلاس مورد نظر اضافه شد ، یکی از این کامپوننت ، از ToolBox به روی صفحه بکشید تا به صفحه اضافه شود.

برنامه هایی که فرستادم ، مربوط به موضوع همین تاپیک است.

mahdi_farhani
پنج شنبه 28 آذر 1387, 16:29 عصر
مرحله 8 احتیاج نیست ، خودش تشخیص میده و dll های مربوطه را اضافه میکنه

Saber_Fatholahi
شنبه 30 آذر 1387, 11:01 صبح
دوست من توی تصویری که خود شما توی صفحه قبلی گذاشته بودید اگه دقت کنید یه گزینه داره بنام ClassLibrary ستون دوم سطر اول دقت کنین کاری نداره وبرای اینکه بیشتر در مورد کامپوننت بدانید می تونین کتاب دکتر شهرام خسروی بخوانید در خدمت شما خواهم بود اگه مشکله دیگه ای داشتید