Ошибка OLE 80131522 при попытке одновременного доступа к сборке .NET из собственного приложения - PullRequest
3 голосов
/ 03 ноября 2010

У меня есть приложение (нативный код Delphi), которому нужен доступ к сборке .NET (предоставляет несколько COM-классов. Я хочу сделать это, используя параллельные сборки и манифесты. Я сделал это с помощью тестовой сборки .NET, но у меня проблема со сборкой, к которой мне нужно получить доступ.

Когда сборка зарегистрирована, я могу создать экземпляр класса COM. Как только я отменяю регистрацию сборки и пытаюсь получить доступ рядом, я получаювышеупомянутая ошибка. У моего собственного приложения есть манифест приложения, который имеет простую зависимость от сборки.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32"
                    name="TestApplication.exe"
                    version="1.0.0.0"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        name="TestAssembly"
        version="1.0.0.0"
        processorArchitecture="x86"
        publicKeyToken="xxxxxxxxxxxxxxxx"
        type="win32"/>
    </dependentAssembly>
  </dependency>
</assembly>

Мой манифест сборки, который я встроил как ресурс в мою сборку .net, выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    name="TestAssembly"
    version="1.0.0.0"
    processorArchitecture="x86"
    publicKeyToken="xxxxxxxxxxxxxxxx"
    type="win32"/>
  <clrClass
    clsid="{F3F1623D-DB4A-4152-9A5D-5A465AD3A318}"
    progid="TestAssembly.MyObject"
    threadingModel="Both"    
    name="TestAssembly.MyObject"
    runtimeVersion="v2.0.50727">
  </clrClass>
  <file name="TestAssembly.dll">
  </file>
</assembly>     

Кажется, что манифесты настроены правильно. Если я изменю имя зависимости манифеста приложения, версию или токен открытого ключа (в данном примере это не тот код, который есть в моем коде), яполучить обычную ошибку SxS о конфигурации приложения неверно.

у меня это работает на другом (админемного проще) .NET сборки, но не могу понять, что не так.Проблема в том, что я не уверен, что означает ошибка.

1 Ответ

3 голосов
/ 03 ноября 2010

Для генерации манифеста сборки .Net используйте mt.exe вот так

c:>mt.exe -nologo -managedassemblyname:"your_binary.dll" -nodependency -out:"temp_file.manifest"
c:>mt.exe -nologo -manifest "temp_file.manifest" -outputresource:"your_binary.dll";2

Затем откройте temp_file.manifest и скопируйте assemblyIdentity дословно тег под тег dependency\dependentAssembly вашего исполняемого манифеста delphi.

К вашему сведению: вы должны хранить как исполняемый файл, так и все зависимые библиотеки .net в одной папке.

...