نمایش نتایج 1 تا 7 از 7

نام تاپیک: کار کردن DLL ساخته شده برای همه ورژن های .NET

  1. #1

    Question کار کردن DLL ساخته شده برای همه ورژن های .NET

    با سلام
    من یک DLL نوشتم و منتهی در قسمت Target Framework اون Net Farmework4. هست و فقط این DLL که ساختم روی برنامه های Net4. کار میکنه. چکار کنم که این DLL که ساخته میشه برای همه ورژن های Net. بشه استفاده کرد.
    ممنون میشم راهنمایی کنید.

  2. #2

    نقل قول: کار کردن DLL ساخته شده برای همه ورژن های .NET

    نقل قول نوشته شده توسط MasoudAdmin مشاهده تاپیک
    با سلام
    من یک DLL نوشتم و منتهی در قسمت Target Framework اون Net Farmework4. هست و فقط این DLL که ساختم روی برنامه های Net4. کار میکنه. چکار کنم که این DLL که ساخته میشه برای همه ورژن های Net. بشه استفاده کرد.
    ممنون میشم راهنمایی کنید.
    وقتی نت 4 گذاشتی قابل استفاده در نسخه های بالاتر هم هست، اما بهترین کار اینه از .Net Standard استفاده کنید تا رنج وسیعی از فریمورک هارو پشتیبانی کنه

  3. #3

    نقل قول: کار کردن DLL ساخته شده برای همه ورژن های .NET

    ممنون میشم بیشتر راهنمایی کنید. تو لیست Target Framework همچین گزینه ای وجود نداره!

  4. #4

    نقل قول: کار کردن DLL ساخته شده برای همه ورژن های .NET

    نقل قول نوشته شده توسط MasoudAdmin مشاهده تاپیک
    ممنون میشم بیشتر راهنمایی کنید. تو لیست Target Framework همچین گزینه ای وجود نداره!
    هنگام ساخته کتابخونه باید یه پروژه از نوع Class Library .Net Standard بسازید

  5. #5

    نقل قول: کار کردن DLL ساخته شده برای همه ورژن های .NET

    سلام. انجام دادم. ولی وقتی تو پروژه ام این DLL رو اضافه می کنم، خطا میده. البته پروژه ای که قبلا ساختم با .Net4 بوده. الان این DLL با حالت Standard رو ساختم و Add کردم تو پروژه خطا داد.

  6. #6

    نقل قول: کار کردن DLL ساخته شده برای همه ورژن های .NET

    سلام،
    برای اینکار نیاز هست که یکی از SDK های Targeting pack رو برای خودتون نصب کنید:

    این دو تا هم نصب کنید:


    (عکس ها از برنامه ویژوال استودیو اینستالر هستن، از نسخه 2017 ویژوال استودیو به بعد یکی هستن، پس روی 2019 و 2022 هم همینجوریه)

    بعد باید فایل csproj کتابخونه ای که ساختید رو به این شکل در بیارید:
    <Project Sdk="Microsoft.NET.Sdk">


    <PropertyGroup>
    <TargetFrameworks>net4.0;net452;netstandard2.0;net 5.0</TargetFrameworks>
    <Authors>Ramtin Jokar</Authors>
    <Description>Ye tozihi rajebe library</Description>
    <PackageTags>tag</PackageTags>
    <AssemblyVersion>1.0.1.0</AssemblyVersion>
    <FileVersion>1.0.1.0</FileVersion>
    </PropertyGroup>


    </Project>



    نکته: دو تا TargetFramework وجود داره، یه دونه ش تهش S نداره که برای سینگل پلتفرم هست، اینی که من استفاده کردم برای مولتی پلتفرم ساپورت استفاده شده(البته از TargetFrameworks هم میشه برای سینگل پلتفرم استفاده کرد).
    نکته: پلتفرم ها با سمی کالن ; جدا میشن که آخرین مورد نیازی نیست بذارید.
    من در بالا برای دات نت فریمورک 4 و 4.5.2 و نت استاندارد 2.0 و دات نت کور 3.1 و دات نت 5.0 ست کردم شما میتونید هر کدوم رو میخواید حذف کنید یا اضافه کنید.
    نکته: برای بیلد این پروژه نیاز هست که کلیه SDK های اون رو نصب داشته باشید.

    نکته: برای نصب یک پکیج یا ریفرنس یک پروژه به یکی از پلفترم ها، میتونید از Condition استفاده کنید:
       <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">    <PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
    </ItemGroup>

    مثلا اینجا نوگت Microsoft.CSharp نسخه 4.7.0 رو نصب رو برای پکیج دات نت استاندارد لایبرری نصب میکنه.
    اگه میخواید یک کتابخونه نوگت رو برای همه ی پلتفرم ها نصب کنید Conditionرو حذف کنید:
      <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    </ItemGroup>

    نکته: اگه نسخه رو ننویسید، آخرین نسخه رو براتون نصب خواهد کرد.

    برای استفاده از کدی که توی یک فریمورک وجود داره اما توی دیگری وجود نداره، میتونید از پِرِه پراسِسور ایف ها استفاده کنید:
    #if NET40
    // کد برای دانت فریمورک 4.0
    #else
    // کد برای بقیه
    #endif


    برای مثال داخل دات نت 4 تسک ها وجود ندارند و درست کار نمیکنند، اگه بخوایم تابعی بنویسیم که برای دات نت 4.0 و بقیه دات نت ها تفاوت داشته باشه اینجوری مینویسیم:
            public
    #if NET40
    string
    #else
    async Task<string>
    #endif
    GetSomethingFromNet()
    {
    var url = "https://barnamenevis.org/showthread.php?566479-کار-کردن-DLL-ساخته-شده-برای-همه-ورژن-های-NET";
    #if NET40
    using (var webClient = new WebClient())
    return webClient.DownloadString(url);
    #else
    using (var httpClient = new HttpClient())
    return await (await httpClient.GetAsync(new Uri(url)).ConfigureAwait(false)).Content.ReadAsStr ingAsync().ConfigureAwait(false);
    #endif
    }

    حتی میتونید نام تابع ها رو هم برای هر فریمورک(پلتفرم) عوض کنید:
            public
    #if NET40
    string
    GetSomethingFromInternet()
    #else
    async Task<string>
    GetSomethingFromInternetAsync()
    #endif
    {
    var url = "https://barnamenevis.org/showthread.php?566479-کار-کردن-DLL-ساخته-شده-برای-همه-ورژن-های-NET";
    #if NET40
    using (var webClient = new WebClient())
    return webClient.DownloadString(url);
    #else
    using (var httpClient = new HttpClient())
    return await (await httpClient.GetAsync(new Uri(url)).ConfigureAwait(false)).Content.ReadAsStr ingAsync().ConfigureAwait(false);
    #endif

    پروژه ای که ساخته شد:
    https://github.com/ramtinak/MyClassLibrarySample

    موفق باشید.

  7. #7

    نقل قول: کار کردن DLL ساخته شده برای همه ورژن های .NET

    سلام. سپاس فراوان

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •