با سلام
من یک DLL نوشتم و منتهی در قسمت Target Framework اون Net Farmework4. هست و فقط این DLL که ساختم روی برنامه های Net4. کار میکنه. چکار کنم که این DLL که ساخته میشه برای همه ورژن های Net. بشه استفاده کرد.
ممنون میشم راهنمایی کنید.
Printable View
با سلام
من یک DLL نوشتم و منتهی در قسمت Target Framework اون Net Farmework4. هست و فقط این DLL که ساختم روی برنامه های Net4. کار میکنه. چکار کنم که این DLL که ساخته میشه برای همه ورژن های Net. بشه استفاده کرد.
ممنون میشم راهنمایی کنید.
ممنون میشم بیشتر راهنمایی کنید. تو لیست Target Framework همچین گزینه ای وجود نداره!
سلام. انجام دادم. ولی وقتی تو پروژه ام این DLL رو اضافه می کنم، خطا میده. البته پروژه ای که قبلا ساختم با .Net4 بوده. الان این DLL با حالت Standard رو ساختم و Add کردم تو پروژه خطا داد.:ناراحت:
سلام،
برای اینکار نیاز هست که یکی از SDK های Targeting pack رو برای خودتون نصب کنید:
https://s18.picofile.com/file/8438133726/1.jpg
این دو تا هم نصب کنید:
https://s18.picofile.com/file/8438133742/2.jpg
https://barnamenevis.org/image/png;b...AAAElFTkSuQmCC
(عکس ها از برنامه ویژوال استودیو اینستالر هستن، از نسخه 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
موفق باشید.
سلام. سپاس فراوان