Ссылка на.dll, которая уже была объединена с Fody/Costura

У меня есть приложение, которое ссылается на.dll, которая была построена с помощью Costura/Fody, т. Е. DLL все встроенные ссылки. Когда я запускаю консольное приложение, ссылки из dll не распаковываются, поэтому консольное приложение выдает исключение, говорящее об отсутствии.dll и т. Д., Так как ему требуются эти ресурсы для запуска. т.е. AssemblyA.dll встраивает MyAssembly.dll при сборке с помощью Costura/Fody. ConsoleAppC ссылается и встраивает AssemblyA.dll, но также нуждается в MyAssembly.dll для запуска. У меня есть ссылка на MyAssembly.dll в ConsoleAppC, чтобы он компилировался (но для CopyLocal установлено значение false). Я думал, что MyAssembly.dll будет доступен для ConsoleAppC, когда встроенные ресурсы AssemblyA.dll будут распакованы?

Это не работает, но допустим ли мой сценарий в любом случае, или вы можете использовать только встроенные ресурсы из ConsoleAppC, а не те, которые были встроены в AssemblyA.dll?

Заранее благодарю за любую помощь

Майк

1 ответ

То, что ты пытаешься сделать, невозможно с Костурой. Фоди. Что делает Costura, так это вставляет библиотеки непосредственно в основную сборку. Это означает, что если вы встраиваете собранную сборку в другой проект, она не может видеть подсборки.

Например, рассмотрим следующую структуру проекта:

AssemblyA
    Foo.cs
    References:
    SubAssembly1.dll
    SubAssembly2.dll
    SubAssembly3.dll
AssemblyB

Предположим, что Costura.Fody используется для встраивания узлов в AssemblyA, создав один файл DLL, AssemblyA.dll

Если вы вставите AssemblyA.dll в AssemblyB, то вы не сможете получить доступ к классам в SubAssembly1.dll, Вы сможете увидеть только те классы, которые находятся непосредственно в AssemblyA.dllтакие, которые содержатся в Foo.cs - вы не сможете увидеть ни одну из библиотек, на которые ссылается / в AssemblyA.dll,

Посмотрите этот ответ на похожий вопрос, где ответчик предлагает вместо этого использовать ILMerge.

Другие вопросы по тегам