VB.NET 64-битный COM с ссылочным классом сборки c #

иметь 64битный проект VB.net, на который нужно ссылаться в 64-битной версии Excel. У меня есть вспомогательный класс ac #, на который ссылается проект VB.net. У меня есть все проекты, подписанные, и проект VB.net установлен для Make Com Visible. Он строит и работает отлично. Когда я установил свой проект VB.net для регистрации в COM-взаимодействии, я получаю сообщение об ошибке.

Ошибка 120 Не удается зарегистрировать сборку «E: \ KSP \ KSP \ SealData \ bin \ x64 \ Debug 64 *** [VB] .dll». Не удалось загрузить файл или сборку '[C # Assembbly name], Version = 1.0.0.0, Culture = neutral, PublicKeyToken = c89dd9761ce81049' или одна из его зависимостей. Система не может найти указанный файл. SealDataStage

Проект C # подписан C # и обновлен в проекте VB. В какой-то момент я получил его для компиляции, и проект установки создал файлы и tlb для проекта VB.net. Теперь я не могу заставить его строить снова. Я посмотрел в GAC, и я не вижу свою DLL в списке. Поэтому я не понимаю, как это будет конфликт gac. Но я не могу понять, что делать.

Это сообщение, за которым я следую, чтобы получить решение для работы с Excel. http://richnewman.wordpress.com/2007/04/15/a-beginner%E2%80%99s-guide-to-calling-a-net-library-from-excel/

Обновленная информация: Я пробовал следующее.

  1. Отредактировано dll-помощника
  2. Все возможные комбинации ком и подписываются.
  3. Я использовал тот же ключ для подписания проектов и разных

Я получил его на работу. Сорт: я открыл проект в 2012 году. Он позволяет мне регистрировать COM и не подписываться. Если я подписываю проекты, это дает мне ту же ошибку, что и в 2010 году. Поэтому я предполагаю, что это проблема с подписью. Я читал, что вы можете вручную зарегистрировать dll без знака или GAC, если он подписан. Я могу вручную добавить DLL в проект установки с 2010 года. Я бы предпочел построить и работать с этим в 2010 году для проекта установки.

Рабочее решение Это сообщение получило мне ответ и находится в c # Excel 2010 64-разрядный не может создать объект .net

Ключом было сочетание настроек COM и ручная регистрация DLL. Следуйте за ответом в вышеприведенном сообщении и убедитесь, что не выполняете настройку REG-кода. Затем вам нужно использовать 64-битный регаз. C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm "C: \ Program Files \ Название компании по умолчанию \ KSP_Setup ******. Dll" / tlb / codebase

Проблема с подписью была решена. Я переименовал проект C #. Затем я продолжал получать сообщение об ошибке, когда старое имя dll не было найдено при компиляции с подписанной сборкой. Я воссоздал все сильные ключевые слова и скомпилировал их. Он также теперь работает в VS2010, и проект установки работает и регистрирует Com dll. В проекте установки на dll COM установите свойства для его регистрации.

Мое решение находится в VB.net «Eck, мне не нравится работать в VB». В любом случае, я решил, что id опубликует рабочие детали. Должен сказать, что вокруг происходит много дезинформации. Я несколько раз ударил головой об этом. Метод ConvertByteArrayToSingleArray должен исправить способ, которым com возвращает массивы как объекты.

Убедитесь, что вы запускаете Visual Studio в качестве администратора

Я установил все параметры компиляции на 64 бит для обоих проектов через диспетчер конфигурации. Made Com включен для VB, а c # не требует com.

Option Strict Off Option Explicit On Imports UpgradeUtils.Activex Imports System Imports System.Runtime.InteropServices <Guid("1F249C84-A090-4a5b-B592-FD64C07DAB75"), _ InterfaceType(ComInterfaceType.InterfaceIsDual)> _ Public Interface IclsSealDataStage <DispId(1)> Function SetStages(ByRef Starts As Object, ByRef Ends As Object, ByRef Cnt As Integer, ByRef XTIME As Object, ByRef YTORQUE As Object, ByRef YDP As Object, ByRef YOILLEVEL As Object, ByRef YOILTEMP As Object, ByRef YSPEED As Object) As Object Sub RegisterInitGlobalVarsDelegates() End Interface <ComVisible(True), _ Guid("E42FBD03-96DF-43a7-A491-23E735B32C5C"), _ ProgId("SealDataStage.clsSealDataStage"), _ ClassInterface(ClassInterfaceType.None)> _ Public Class clsSealDataStage Inherits ComponentClassHelper Implements IclsSealDataStage Public Function SetStages(ByRef Starts As Object, ByRef Ends As Object, ByRef Cnt As Integer, ByRef XTIME As Object, ByRef YTORQUE As Object, ByRef YDP As Object, ByRef YOILLEVEL As Object, ByRef YOILTEMP As Object, ByRef YSPEED As Object) As Object Implements IclsSealDataStage.SetStages Dim oStarts As Array = ConvertByteArrayToSingleArray(Starts) Dim oEnds As Array = ConvertByteArrayToSingleArray(Ends) Dim oXTIME As Array = ConvertByteArrayToSingleArray(XTIME) Dim oYTORQUE As Array = ConvertByteArrayToSingleArray(YTORQUE) Dim oYDP As Array = ConvertByteArrayToSingleArray(YDP) Dim oYOILLEVEL As Array = ConvertByteArrayToSingleArray(YOILLEVEL) Dim oYOILTEMP As Array = ConvertByteArrayToSingleArray(YOILTEMP) Dim oYSPEED As Array = ConvertByteArrayToSingleArray(YSPEED) Form1.DefInstance.PlotData(oXTIME, oYTORQUE, oYDP, oYOILLEVEL, oYOILTEMP, oYSPEED) 'Form1.pg_MouseDown Starts(), Ends() Form1.DefInstance.starts_ends(oStarts, oEnds, Cnt) Form1.DefInstance.ShowDialog() Return VB6.CopyArray(stages) 'Oddly enough these are not suppose to work in 64 but do???? End Function Private Function ConvertByteArrayToSingleArray(ByVal Starts As Object) As Array Dim obj As Object = DirectCast(Starts, Object) Dim ct As Array = DirectCast(obj, Array) Dim content As Single() = New Single(ct.Length) {} ct.CopyTo(content, 0) Return ct End Function 

Я действительно надеюсь, что это спасет кого-то из тех дней, которые я потерял. 🙂 Если бы я действительно помог сбросить линию здесь. Я проверю время от времени.

Вы не можете ссылаться на 32-битную сборку из 64-битного приложения или сборки.

Если у вас есть сборка, требующая регистрации для Interop, это должно быть 32 бит. Вы не можете зарегистрировать его как COM-компонент, иначе

  • Не удается открыть более 11 экземпляров Excel с помощью Excel в Windows 10
  • Программно (C #) конвертировать Excel в список изображений
  • Экзамены Excel Interop не будут закрываться
  • Объекты Excel Interop не освобождаются
  • Ошибка MS Office PIA Com Interop
  • В Excel VBA как перенести ключевые переменные на «потерю состояния» (без записи в ячейку или файл)?
  • Экспорт данных в шаблонную таблицу Excel с помощью приложения Excel Application
  • Ошибка автозаполнения в excel c #
  • Как подписчики .Net подписываются на события COM-взаимодействия, когда RuntimeCallableWrapper отключается (и как бороться с отсутствующими событиями)?
  • Кодирование Проблема при чтении файла Excel через PHP COM
  • Очистка объектов Excel Interop с помощью IDisposable
  • Давайте будем гением компьютера.