Ссылка на .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?

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

Майк


person mikip    schedule 23.07.2018    source источник
comment
Возможный дубликат ​​пространств имен встроенной библиотеки Costura.Fody не найден   -  person Eliza Bennet    schedule 02.10.2018


Ответы (1)


То, что вы пытаетесь сделать, невозможно с Costura.Fody. 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.

person Eliza Bennet    schedule 02.10.2018