PDA

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



MasoudAdmin
پنج شنبه 17 تیر 1400, 15:59 عصر
با سلام
من یک DLL نوشتم و منتهی در قسمت Target Framework اون Net Farmework4. هست و فقط این DLL که ساختم روی برنامه های Net4. کار میکنه. چکار کنم که این DLL که ساخته میشه برای همه ورژن های Net. بشه استفاده کرد.
ممنون میشم راهنمایی کنید.

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

MasoudAdmin
جمعه 18 تیر 1400, 10:27 صبح
ممنون میشم بیشتر راهنمایی کنید. تو لیست Target Framework همچین گزینه ای وجود نداره!

barnamenevisjavan
جمعه 18 تیر 1400, 11:33 صبح
ممنون میشم بیشتر راهنمایی کنید. تو لیست Target Framework همچین گزینه ای وجود نداره!
هنگام ساخته کتابخونه باید یه پروژه از نوع Class Library .Net Standard بسازید

MasoudAdmin
جمعه 18 تیر 1400, 11:46 صبح
سلام. انجام دادم. ولی وقتی تو پروژه ام این DLL رو اضافه می کنم، خطا میده. البته پروژه ای که قبلا ساختم با .Net4 بوده. الان این DLL با حالت Standard رو ساختم و Add کردم تو پروژه خطا داد.:ناراحت:

ramtinak
پنج شنبه 24 تیر 1400, 17:57 عصر
سلام،
برای اینکار نیاز هست که یکی از SDK های Targeting pack رو برای خودتون نصب کنید:
https://s18.picofile.com/file/8438133726/1.jpg
این دو تا هم نصب کنید:
https://s18.picofile.com/file/8438133742/2.jpg
https://barnamenevis.org/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAT8AAAA CAYAAABdjRy6AAANhklEQVR4Ae2dz4ukVxWG/VfyNwiCCyVu3LkQIeBCEAKCuM3KtQTRBAKCMoRBonGVRXaB4Kw mATcDrkaZbBLEiBBhXGQgYQxXHtuHfufM/bqqv650Vc93ApX765z3nHu 9759a6qp/spzzz03 tU1aA40B7bGga9sbcO93z7kzYHmABxo8eubb9/8mwOb5ECLXxN/k8Tv21/f/lr8Wvxa/JoDm RAi18Tf5PE75tf3/xa/Fr8WvyaA5vkQItfE3 TxO bX9/8Wvxa/Fr8mgOb5MC1id9XfzbGIV79E7t/YjcHmgOH4ECLX//U3 RP/UMcnsa42SJ8kuL3tZfHePf GD 4/fRtsQl3swnXz6 f36lw4CTF77U743///eeLMX70 ycFcE3hHjx4MB4/fjxeeumlp245b7755vjkk0 emt8njrhg 3rvvfdWYe0T79A27J28D43beC1wN4EDJyd P317jE8/OxO/P/5ljOdfOZz4zURurfghGohfPmTEtc7leu0jlJexr/5XHbf4tUhdlUM32f kxO 7vx7j3kdnwvf3h2P8 A9PCh8fmKwpNgKD0CBY9Wa2RvwQ0YqzJq8WvxafNbxpn8Pw5ij ih6h94xdPC9utu2fCx/9/96en168qft508u1vFb ZsCmekE6MfQmIr2 J8y0mcXJ SUzNJ3HoZ3xzEm G5RotmLO9iKO/Y32dNzZ1dI1We9czhnbY5Hr2wXe/2hvTMW0 P/xzzb2Jyxoxmdeu5pBr2OhrW2vP2Ly0SYzMwRpZm1zTt9vDiNll 63jt4vfCrTEefT7G/X M8e3XzgXu 6 Pwb/x8d H/xrj6z8/X8tfkbnsBrFPstLnJY4HwzHkrMROf9bSX79ZW2Phm TfBwt7D7AxmMscsu9hS4HAP/dk3wMJrn4pDBfhzuzN1TwTP2NkbtrSklfmqj9z pBT1hCbzJk19wcmvulvDOOCm/bg575n8TJHcGrMxLBOmbOxuz2O6Fn3axe/ux cCRz///jfY3zvN2Pw6e6Df57NI4A//O1c K5683PTkNcDQ5vErETGBzJ7QLIvHnMeMrEkvTa29SDi69qsBa/akDM4M3vm8HF/5F399Usc8Nyj67VNXDArbt1z2ouFz1Ic5vHRlpZx2tcYaUsf28 xrtq98BtU/ WAs2rTLPaS9Nvoxtu/z0Kbb4wof9b928eO29 e/nQvgw0dnv9bizNLbXW9/a0iTZMWfA6J4VPLWw4Z9 tPnNcsjsegTY/byINSDOsOc5eOBSnvsMpYxZv76meNFNpfBrXllPtlfqh/1IJ750TJ2L4xrDOZ8nsZIfObSH/s6Zx30Nwfn8ckX MScxRaDllzNlzYxuv9kTY9Rj2sXP0TsO78a4617yt15e evY3zr1eVb36FufhQagkNgCC7Zcz4fRpK92qddri0dnLQnfh7U XLNvno5pPVDZ9zAyhw/xa59xvswR 6wBNsa4DK4 xqgi4/xSS6yaR 4l8xKj5l5rOssh56g/Y/HqM6z5YJd8mOUsFq01oc357j/JxWPU4yjih4h985dj3H5/jMf//3e jx O8ZPJp7ve GzXFCnJqr krOSd2XIAsNM3D49ztHlwxL I9PWgJpb9GrvGmWHgo/ixH17iZav4MYdP2q3BTTwxs24Ze9bHljxyLffCvHWtfX1q3rNn lXP08xnt8wzJyX3VPZuHrflmDNe6Pa4AHk38FLOX3zn7oGPX21 3t1xBmJmjgMA/588BBauaM41iyMy/hc875xAI/x8ZM7Lrumi3r9YAyJgdszEV783Xdw cYO/OuvuAqgHWt4rqehxp/XuYyswEnfbQ1r1oPxuBo534cZy1ccw/Y5PrMB3zroX3mQD/xrEP6VBtw9DGnpT2bU7fXL4RHFz9E7cU3lj/dVfRs15AEIiZZE4PDkWRnjTHzvPBb8tcm20ryxMIuDzKx9F3KD 3/WEqfakl/iYJtxPIDaeDAVJ uhHf7M7cLVX1z9xaMlV9dpjZ029t2nY9qlvWiTOWALRsYgZtYC v5wzZ3PE1v0bg7Hr4tO6LqY2tOAyL77j9On 9Qte1vwkxE9h26fN5LfQ90DfhL3OhOMm5H3ZHHkmVVAvi9H2xx U 6t/iVz4EODVS3iTx48ZTb0SnVs r5sP 2OdVcdp/Q LXD3vdwz5V8ePmk2/z6D LtyHqn/tk3Fxex VTq9u13fxObeOdz7NB4H6O/RzXcqDF78Tf9q59sO3XotAcuJgDLX4tfv02rjmwSQ60 DXxN0n8vhVdfCvaQn1a/Fr8WvyaA5vkQItfE3 TxN/Czab3ePHttsWvxa/FrzmwSQ60 DXxN0n8vhVdfCvaQn1a/Fr8WvyaA5vkQItfE3 TxN/Czab3ePHt9trEb58vLdjHph/oxQ 069P1aQ7sx4EWv7759c2vObBJDpyk PEHjd69P8YPbj/9lfb9U22/n2pdp65Tc BiDpyk L125 zvevCX3H70 ycFcM0D9Us5Z18oeZXvoBM3v/XjWf9KpzX1/7J8dj07nsVVv4XFb6/xG2t45vllqbO9EVP72foh557Vb9M5ZI2WsE5O/H769hiffnYmfn/8yxjPv3I48ZsdhF0HaKlwkK4eAsS1zi35M8/h3GW/Nr L4q5dI9dTEvddtTmE NVaUYNdz2yX O3z3GvcpXGL38W3u6W6MX9S4vfdX49x76Mz4fv7wzF PPmDRhdtZmnNQwtR6uHddYBmmJC74szsds3tcwjW5Lcr7tp167 jW/9B u2pDfWc/8K6SR4vferG5St2/DN jiB i9o1fPHmj45PeW3fP/4zl0h80WlMEDy2HBQHMt7/1AM2ETX9ii7FvHvgS05d xHGOdiam1Zex/ulbDzhr5klfn8Sjz6vGzbwSN OJD25iZixjZpsYiY2NmBmfPaR/7int0yb7il/1Sxvi1RpkXeAKseSMdasY7i1jpo393B8 xq45Oj/zy9pZB 0Y13VzI3ftuj3Cze FW2M8 nyM /8Ygz9g7q 3fP/1s7/ihvx9 K/lP2i05qElmSt5IV2ShX4lXvqzti Jaix8M9Y WDU/9s8cL2tRc5bsrtOSS8bGH7vca8Wp TNO 9l Mmb2981ZkQGb/MQwX9eZZz33pK2tGORd5xzXPTOf 9wlfvjP8PP5GMuWvNLHmK7viom/ttTAWDWXurf003/L7bXf/O5 cH67 /jfY3zvN2Pw6e6Df57N8yHHD397LoqKo 2ah5Vkxj8JA3EgibiVMMynf/b1YQ7MPIwSWBtbbDzAs0OgnW3Nz/lsKw4xkujmYlx9cy zOPrN7JmrcbXbp62 NWcwslaz5zLLOWMTA4ycExdf jPcrIs1sHas8cIXjBk mOLX2Izr3mc2iZH5VFviEwsbfHI9MXK2dv3a9d/Ljt/flv5wL48NHZr7U4s/R295Dil4cC4iRp6LOeBEny0eeV6/YTiz7EnL1Yw2efQ5CYxtE3sTMnD4T25uLYNvdlTRLTfh78rI3C gJ02Ys/aGuOinPHPfWRf7KXauE68fLbOpyjset7u0f2Rs3nvg2/MbPETI fJxZrnfn1 zKU9febw41XXrPdsrdpucXzt4oeIfedXY7x1T7k7b /8dYxvvbp868N3zUOCaBAhfSEEc/UAOZ 26V/t0y7XJGyu1/7SIUi7xHSeHJPQFScPDj4zDOZzX2AkprGyTfucd68X V82Z/BzH/QVIGMv7cv1pT2RC77Y0cdOH9rc5y7xwzZ9xRS/rjGuz8sYmUfmKAbr1CFjMsZ2Vh/9sGc98V3bcnsU8UPEvvnLMW6/P8bjL87E7 OHY/xk8umuNz7bNQ8ryax/Eg7yOD zrQcEIs3InYdRfFqxa1sPQV1nnJiMxU3bilPz06fmkvsiDn6JW/uz2qQNeLO6GD9td WMbe4jcxUHDOYd13ZpHVxrMdtTxjL3tMeHWEs1y7xrTozr3usY m6Vaspb5GwsM rN4zLmPpfUtzh9N/BSzl985 6Bj19td7dc8pBnBwWEewuQBqiRyTGtsSZ9zrDGfWODn2Jji4F/XXbM1lmNaCU9fUnsg67p xEmb2b6qDb7pQ7 OxV K6/qanNPHfMVz3xfVTx9a/eoetHHdsT7GocWm pOjtq5n3uJmi33mXZ xOTAvpv41n4xFboy1zWdVY2iz5fbo4oeovfjG8qe7ip7tmocFC ZKgiQFZkoisMWaeF35L/tpk6yExRmJhJ6Fd13cpv8xHMktkfME3x8SscRIHP31qXPOxzf1 48FgDH1/tnDOH2q7JuWJmPPYNJm2N5Rh762OeM3vmXMcnn7d7tg6s RyMo6/5gjerv/a0 hCPMZg5lxi5ho25iJOx3As29sXN N0/wq 6KGJr235oh/sl0zxgXdfD1bVreTNqeRI3v8sIYRPrMMTyFtX1PEw9u443r47X Jn5NjuOSo74FYtzP5LjPpOt/3Pq3 PV3ubUINgc2yYEWvyb Jonft67j3rpOof4tfi1 LX7NgU1yoMWvib9J4p/CzaNzOO7ts8Wvxa/FrzmwSQ60 DXxN0n8vnUd99Z1CvVv8Wvxa/FrDmySAy1 TfxNEv8Ubh6dw3Fvny1 LX4tfs2BTXLgvwHQCieoixiZAAAAAElFTkSuQmCC
(عکس ها از برنامه ویژوال استودیو اینستالر هستن، از نسخه 2017 ویژوال استودیو به بعد یکی هستن، پس روی 2019 و 2022 هم همینجوریه)

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


<PropertyGroup>
<TargetFrameworks>net4.0;net452;netstandard2.0;net5.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

موفق باشید.

MasoudAdmin
شنبه 26 تیر 1400, 20:12 عصر
سلام. سپاس فراوان