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