صافي إمكانية التشغيل المتداخل: عن طريق تجميع في الدليل الحالي

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

سؤال

وأنا أحاول أن استخدام تجميع .NET من VB6 عن طريق إمكانية التشغيل المتداخل دون وضعه في GAC ودون استخدام الحجة / تعليمات البرمجة الأساسية لregasm.exe.

وحسب ما فهمت، عند تشغيل regasm.exe على مكتبة فئة .NET، فإنه يخلق إدخال التسجيل لكل فئة في مكتبة الفئة قول عملاء COM ينبغي تحميل MSCOREE.DLL التي هي بمثابة التفاف الوكيل. كائنات NET للاستخدام COM. MSCOREE.DLL يستخدم مفتاح InprocServer32 / الجمعية في التسجيل للفصل الدراسي لتحديد أي يحتوي على مكتبة فئة تنفيذ الطبقة.

إذا كنت تستخدم / تعليمات البرمجة الأساسية مع regasm.exe أو وضع مكتبة صفي في GAC، كل شيء يعمل بشكل جيد. ولكن بقدر ما أستطيع معرفة من وثائق متناثرة، MSCOREE.DLL ينبغي أن ننظر للجمعية في الدليل الحالي والمسار إذا لم يتم استخدامه / تعليمات البرمجة الأساسية (وبالتالي ليس هناك أي إدخال تعليمات البرمجة الأساسية في التسجيل ل الطبقة)، وأنه لا يمكن العثور عليه في GAC.

ووC # رمز بسيط كما يمكن أن يكون:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace myinterop
{
    [Guid("B1D6B9FE-A4C7-11DD-B06B-E93056D89593")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class MyServer
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

والمشكلة يستنسخ مع فبسكريبت بطانة واحدة أن أضع في نفس الدليل ك DLL المترجمة:

object = CreateObject("myinterop.MyServer")

وماذا أنا في عداد المفقودين هنا؟ هناك وصفا نهائيا من الطريق MSCOREE.DLL بالبحث عن المجالس في مكان ما؟

وراجع للشغل، أنا باستخدام .NET Framework 2.0 ونعم، وأنا أعلم أنني يجب أن تضع المجالس بلدي في GAC، أنا فقط أتساءل لماذا هذا لا يعمل كما هو معلن.

هل كانت مفيدة؟

المحلول

MSDN :

<اقتباس فقرة>   

على / تعليمات البرمجة الأساسية : ليخلق إدخال تعليمات البرمجة الأساسية في   التسجيل. ويحدد دخول تعليمات البرمجة الأساسية   مسار الملف لاختيار جمعية والتي هي   غير مثبتة في التجمع العالمي   مخبأ. يجب أن يتم تحديد هذا   الخيار اذا صح التعبير في وقت لاحق   تثبيت التجميع الذي كنت   تسجيل في تجميع العمومي   مخبأ. حجة assemblyFile أن   تحدده مع الخيار / تعليمات البرمجة الأساسية   يجب أن يكون التجمع المكون من اسمه.

ويبدو أنه يعمل كما هو معلن. إذا كنت لا تضع التجميع الخاص بك في GAC، فأنت بحاجة لاستخدام / تعليمات البرمجة الأساسية بحيث أسم دليل يمكن الوصول إليها.

نصائح أخرى

لتحقيق ما تريد، وأعتقد أن تحتاج إلى إنشاء الملفات ملفات .manifest لكل من تجميع .NET وVB6_App.EXE الخاص بك (الرجوع إلى تجميع .NET). تحقق من Google للCOM خالية من التسجيل.

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