كيفية تسجيل .صافي الاتفاقية مع regasm من Visual Studio 2008 إعداد المشروع
-
04-07-2019 - |
سؤال
لدى إعداد مشروع .صافي خدمة التطبيق الذي يستخدم .صافي العنصر اللي تبونه يعرض واجهة COM (COM للاستدعاء المجمع / CCW).للحصول على عنصر العمل على الجهاز الهدف ، يجب أن تكون مسجلة مع
regasm.exe /tlb /تعليمات البرمجة الأساسية component.dll
على /tlb التبديل إلى توليد عناصر إلزامية في هذه الحالة ، وإلا أنا لا يمكن إنشاء كائنات من تلك الجمعية.
السؤال هو كيف يمكنني تكوين Visual Studio 2008 إعداد مشروع تسجيل هذه الجمعية مع دعوة إلى regasm /tlb ?
المحلول
ويمكنك أن تفقد الدعوة اليدوية لregasm.exe باستخدام System.Runtime.InteropServices.RegistrationServices بدلا من ذلك:
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase))
{
throw new InstallException("Failed to register for COM Interop.");
}
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
RegistrationServices regsrv = new RegistrationServices();
if (!regsrv.UnregisterAssembly(GetType().Assembly))
{
throw new InstallException("Failed to unregister for COM Interop.");
}
}
وهذا unregisters أيضا المكتبة على إلغاء التثبيت.
نصائح أخرى
- في المشروع الرئيسي (واحد يحتوي على فئة تريد تسجيل) ، الأيمن فوق project file واختر إضافة / عنصر جديد ثم اختر المثبت الدرجة.كما clsRegisterDll.cs
- في مصمم التي تظهر ، انقر فوق انقر هنا للانتقال إلى طريقة عرض التعليمات البرمجية أو حق انقر على clsRegisterDll.cs الملف في "مستكشف الحلول" ثم حدد عرض التعليمات البرمجية
تجاوز تثبيت ارتكاب وإلغاء أساليب مضيفا:
// على موقع regasm سلسلة regasmPath = النظام.وقت التشغيل.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + @"regasm.exe";// على موقع DLL سلسلة componentPath = تشير typeof(RegisterAssembly).الجمعية.الموقع ؛ // تنفيذ regasm
النظام.تشخيص.العملية.تبدأ(regasmPath, "/برنامج /tlb \"" + componentPath + "\"");المقايضة /برنامج /tlb ل /u في إلغاء العمل.
- ترجمة المشروع الخاص بك
- في المثبت الخاص بك ، تأكد من أن لديك إضافة dll إلى مجلد التطبيق ، ثم انقر نقرا مزدوجا فوق المثبت المشروع واختر عرض / إجراءات مخصصة
- انقر بزر الماوس الأيمن فوق تثبيت ثم انقر فوق إضافة إجراء مخصص
- انقر نقرا مزدوجا فوق مجلد التطبيق ، ومن ثم على dll الخاص بك
- تفعل الشيء نفسه بالنسبة ارتكاب عمل
- بناء واختبار الخاص بك المثبت
تجول مع الدرجة الفعلية بالنسبة لك لمحاولة يمكن الاطلاع على: http://leon.mvps.org/DotNet/RegasmInstaller.html
ويجب أن يكون لديك خدمة فئة المثبت. سجل لهذا الحدث OnAfterInstall وندعو RegAsm: يجب احتساب المسار من الدليل Windows، وتعادل لنسخة صافي محدد
وحاولت في البداية تشغيل regasm من عملية التثبيت (قبل أن أرى هذا النشر). محاولة تشغيل regasm، والتعامل مع جميع الأخطاء وإشكالية - حتى دون محاولة للتعامل مع امتيازات مرتفعة ويندوز 7
وعن طريق وRuntime.InteropServices.RegistrationServices.RegisterAssembly
أنظف بكثير، وقدمت خطأ محاصرة أفضل بكثير.
والبصرية ستوديو المثبت يجعل تسجيل فئة COM فقط، ولكن لا تجعل من نوع الجيل مكتبة والتسجيل (هذا ما /tlb
التبديل في regasm.exe does
) بشكل افتراضي. على الأقل في Visual Studio 2017 وهو ما يكفي لتوليد مكتبة النوع في مرحلة ما بعد بناء خطوات DLL أن تكون مسجلة باستخدام أداة Tlbexp.exe
.
وإذا كان المشروع المثبت يكتشف ملف مع التمديد .tlb
في نفس الدليل ومع نفس اسم المكتبة التي تقوم بتثبيت، فإنه تلقائيا يتضمن لمشروع الإعداد ويجعل خطوات التسجيل أثناء التثبيت. وبطبيعة الحال فإنه من الممكن أيضا لإنشاء ملف .tlb
من جهة، وإدراجه في مشروع إعداد (وتعيين الخاصية التسجيل لvsdrfCOM
).
وهنا هو <وأ href = "https://www.red-gate.com/simple-talk/dotnet/visual-studio/build-and-deploy-a-.net-com-assembly/" يختلط = "نوفولو noreferrer"> المادة كبيرة حول C # و واجهة COM والمعلومات تأتي من فوق القسم الذي يطلق عليه النشر.