كيفية تسجيل .صافي الاتفاقية مع regasm من Visual Studio 2008 إعداد المشروع

StackOverflow https://stackoverflow.com/questions/239465

سؤال

لدى إعداد مشروع .صافي خدمة التطبيق الذي يستخدم .صافي العنصر اللي تبونه يعرض واجهة 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 أيضا المكتبة على إلغاء التثبيت.

نصائح أخرى

  1. في المشروع الرئيسي (واحد يحتوي على فئة تريد تسجيل) ، الأيمن فوق project file واختر إضافة / عنصر جديد ثم اختر المثبت الدرجة.كما clsRegisterDll.cs
  2. في مصمم التي تظهر ، انقر فوق انقر هنا للانتقال إلى طريقة عرض التعليمات البرمجية أو حق انقر على clsRegisterDll.cs الملف في "مستكشف الحلول" ثم حدد عرض التعليمات البرمجية
  3. تجاوز تثبيت ارتكاب وإلغاء أساليب مضيفا:

    // على موقع regasm سلسلة regasmPath = النظام.وقت التشغيل.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + @"regasm.exe";// على موقع DLL سلسلة componentPath = تشير typeof(RegisterAssembly).الجمعية.الموقع ؛ // تنفيذ regasm
    النظام.تشخيص.العملية.تبدأ(regasmPath, "/برنامج /tlb \"" + componentPath + "\"");

    المقايضة /برنامج /tlb ل /u في إلغاء العمل.

  4. ترجمة المشروع الخاص بك
  5. في المثبت الخاص بك ، تأكد من أن لديك إضافة dll إلى مجلد التطبيق ، ثم انقر نقرا مزدوجا فوق المثبت المشروع واختر عرض / إجراءات مخصصة
  6. انقر بزر الماوس الأيمن فوق تثبيت ثم انقر فوق إضافة إجراء مخصص
  7. انقر نقرا مزدوجا فوق مجلد التطبيق ، ومن ثم على dll الخاص بك
  8. تفعل الشيء نفسه بالنسبة ارتكاب عمل
  9. بناء واختبار الخاص بك المثبت

تجول مع الدرجة الفعلية بالنسبة لك لمحاولة يمكن الاطلاع على: 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 والمعلومات تأتي من فوق القسم الذي يطلق عليه النشر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top