Mono(mono-config) Mono(mono-config)

mono-config - قالب فایل پیکربندی محیط اجرای Mono

محیط اجرای Mono داده‌های پیکربندی را از فایل پیشوند نصب /etc/mono/config، فایل ~/.mono/config یا فایلی که توسط متغیر محیطی MONO_CONFIG مشخص شده است بارگذاری می‌کند.

به ازای هر اسمبلی بارگذاری‌شده، یک فایل پیکربندی با نام /path/to/the/assembly.exe.config و همچنین فایل ~/.mono/assemblies/ASSEMBLY/ASSEMBLY.EXT.config بارگذاری می‌شود.

این فایل رفتار محیط اجرا را کنترل می‌کند.

این فایل حاوی ساختاری شبیه به XML با بخش‌های گوناگون است که همگی درون بخش <configuration> قرار دارند (در واقع برای تجزیه فایل از GMarkup استفاده می‌شود).

این صفحه راهنما، افزونه‌های مختص یونیکس و مختص Mono در فایل پیکربندی را شرح می‌دهد؛ برای جزئیات کامل، به صفحه وب http://www.mono-project.com/Config مراجعه کنید.

شما از دستورالعمل dllmap برای نگاشت کتابخانه‌های مشترک (shared libraries) ارجاع داده‌شده توسط P/Invoke در اسمبلی‌های خود به یک کتابخانه مشترک متفاوت استفاده می‌کنید.

این ویژگی معمولاً برای نگاشت کتابخانه‌های ویندوز به نام کتابخانه‌های یونیکس به کار می‌رود. عنصر dllmap دو صفت دریافت می‌کند:

این مقدار باید همان رشته‌ای باشد که در صفت DllImport استفاده شده است و می‌تواند به صورت اختیاری دارای پیشوند "i:" باشد تا نشان دهد رشته باید بدون حساسیت به حروف بزرگ و کوچک تطبیق داده شود.
این مقدار باید نام کتابخانه‌ای باشد که تابع در آن یافت می‌شود: این نام باید برای استفاده در توابع بومی بارگذاری کتابخانه‌های مشترک پلتفرم (مانند dlopen و غیره) مناسب باشد، بنابراین شاید بخواهید صفحات راهنمای مربوط به آن‌ها را نیز بررسی کنید.

این دستورالعمل می‌تواند برای نگاشت یک جفت مشخص از dll/تابع به یک کتابخانه متفاوت و همچنین نام تابع متفاوت استفاده شود. این عنصر باید درون عنصر dllmap که تنها صفت dll آن مشخص شده است قرار گیرد.

عنصر dllentry ۳ صفت دریافت می‌کند:

این کتابخانه مقصد است، جایی که تابع در آن یافت می‌شود.
این نام تابع است همان‌طور که در متاداده ظاهر می‌شود: نام متد P/Invoke است.
این نام تابعی است که باید به جای نام مشخص‌شده در متد P/Invoke جستجو شود.

هر دو عنصر dllmap و dllentry دو صفت زیر را مجاز می‌دانند که استفاده از یک فایل پیکربندی واحد و پشتیبانی از چندین سیستم‌عامل و معماری با نیازمندی‌های نگاشت متفاوت را آسان می‌کند:

این نام سیستم‌عاملی است که نگاشت باید برای آن اعمال شود. مقادیر مجاز عبارتند از: linux, osx, solaris, freebsd, openbsd, netbsd, windows, aix, hpux.
این نام معماری پردازنده‌ای است که نگاشت باید برای آن اعمال شود. مقادیر مجاز عبارتند از: x86, x86-64, sparc, ppc, s390, s390x, arm, mips, alpha, hppa, ia64.
این اندازه ثبات‌ها (registers) در معماری مقصد است که می‌تواند ۳۲ یا ۶۴ باشد.

مقدار هر دو صفت می‌تواند فهرستی از مقادیر مجاز باشد که با کاما از یکدیگر جدا شده‌اند. علاوه بر این، اولین نویسه می‌تواند یک '!' باشد تا معنای عبارت را معکوس کند. برای مثال، مقدار صفت "!windows,osx" به این معنی است که این مدخل در تمام سیستم‌عامل‌ها به جز ویندوز و OS X در نظر گرفته می‌شود. هیچ فاصله‌ای در هیچ بخشی از مقدار مجاز نیست.

توجه داشته باشید که مدخل‌های بعدی، مدخل‌های تعریف‌شده قبلی در فایل را بازنویسی (override) خواهند کرد.

مثال زیر ارجاعات به کتابخانه مشترک `cygwin1.dll' را به فایل `libc.so.6' نگاشت می‌کند.

<configuration>
	<dllmap dll="i:cygwin1.dll" target="libc.so.6"/>
</configuration>

نام کتابخانه در صفت DllImport مجاز است در هر حالتی از حروف بزرگ و کوچک باشد، مانند مثال‌های زیر:

[DllImport ("cygwin1.dll")]
[DllImport ("Cygwin1.dll")]
[DllImport ("cygwiN1.Dll")]

این مثال متد #C زیر را:

[DllImport ("libc")]
static extern void somefunction ();

به differentfunction در libdifferent.so نگاشت می‌کند، اما هنگام اجرا در سیستم‌عامل‌های Solaris و FreeBSD به همان تابع در کتابخانه libanother.so نگاشت می‌گردد.

<configuration>
	<dllmap dll="libc">
		<dllentry dll="libdifferent.so" name="somefunction" target="differentfunction" />
		<dllentry os="solaris,freebsd" dll="libanother.so" name="somefunction" target="differentfunction" />
	</dllmap>
</configuration>

mono(1), monodis(1), mint(1)