a reference to could not be added

У меня есть два проекта в решении с именем ProjectA (ConsoleApplication) и ProjectB (ClassLibrary). ProjectA имеет ссылку на ProjectB. Вообще говоря, ProjectA вызывает метод в ProjectB, чтобы сделать некоторые вещи и вернуть результаты ProjectA. Иногда, однако, мне нужно, чтобы ProjectB отправил некоторую «дополнительную» информацию в ProjectA (более конкретно, чтобы вызвать метод Console.WriteLine() в ProjectA). Для этого мне нужно передать ProjectA в ProjectB, но когда я попытаюсь это сделать, я получаю следующую ошибку:

A reference to ProjectA could not be added. Adding this project as a reference would cause a circular dependency .

Я понимаю концепцию всей связи, и имеет смысл получить это сообщение, однако мне нужно в некоторых случаях присылать дополнительную информацию в ProjectA. Любые идеи?

Я предлагаю вам использовать события и слушателей. Например, вы можете отправлять сообщения из ProjectB через Trace.WriteLine , а в ProjectA — добавить подписчика на трассировку..NET уже предлагает класс ConsoleTraceListener для маршрутизации сообщений Trace на консоль. Вы можете добавить слушателя из ProjectA через:

В качестве альтернативы, если вы не хотите использовать интегрированные классы, вы можете создать очень простой «исходный» класс в ProjectB, который выведет событие с Action в качестве своей подписи (хотя я бы предложил вам создать делегат для него), а затем подписаться на него от ProjectA. Как правило, классы .NET более гибкие.

ProjectB

ProjectA

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

Существует несколько способов решения этой проблемы, некоторые из которых были упомянуты в других ответах. Еще не опубликовано, чтобы полностью устранить зависимость между проектом A и проектом B и создать третий проект C, который определяет интерфейсы, с которыми взаимодействуют A и B. То есть:

И затем сделайте проекты A и B справочного проекта C и сделайте их классы реализованы IFoo, IBar и т.д. Когда метод в проекте A должен вызывать Frob на объекте в проекте B, он делает это, получая IFoo, а не получая некоторый класс в B.

When I add a .dll file as a reference in C# application it shows an error :

A reference to the «. dll» could not be added.Please make sure that the file is accessible and that it is a valid assembly or COM component.

ILDissassembler says there is no valid CLR header so I try to register it using regsvr32 and that gives me another error:

The module «» was loaded but the call to DLLRegisterServer failed with error code ‘0x80004005’

I am using VS2010 ultimate version on a 64bit Windows 7 machine. What could be the problem?

Thanks for any hints/replies

15 Answers 15

The following worked for me:

Short answer

Run the following via command line (cmd):

And a valid dll will be created for you.

Longer answer

Find TlbImp.exe. Probably located in C:Program Files (x86)Microsoft SDKsWindowsv7.0ABin. If you can’t find it go to your root folder (C: or D:) and run:

Run tlbimp.exe and put your dll behind it. Example: If your dll is cvextern.dll. You can run:

  • A new dll has been created in the same folder of tlbimp.exe. You can use that as reference in your project.
  • You can add a DLL (or EXE) to a project only if it is a .NET assembly. If it’s not you will see this error message.

    regsvr32 also makes certain assumptions about the structure and exported function in the DLL. It has been a while since I used it but it has to do with registering COM servers so certain entry points need to be available. If regsvr32 fails the DLL doesn’t provide those entry points and the DLL does not contain a COM component.

    You only chance for using the DLL is to import it like any other non-.NET binary, e.g. when you use certain Win32 APIs. There is an old MSDN Magazine Article that might be helpful. See the following update for info where to get the article.

    Update 12 March 2018: The link to the MSDN Magazine no longer works as it used to in August 2010. The article by Jason Clark is titled «.NET Column: Calling Win32 DLLs in C# with P/Invoke». It was published in the July 2010 issue of MSDN Magazine. The «Wayback Machine» has the article here at the moment (formatting is limited). The entire MSDN Magazine issue July 2010 is available here (HCM format only, instructions for how to use HCM files here).

    When I try to add a dll file into my project the following error occurs :

    A reference to dll could not be added. Please make sure that the file is accessible and that is a valid assembly or COM component.

    But I have imported the dll file using DLLImport statement. This is urgent. Hence please suggest a solution at the earliest. I tried using regsvr32 also.

    Оцените статью
    Добавить комментарий