Использование C# в visual studio 2012, я создал библиотеку классов FileTube.dll Он использует 3 других dll's. Я хочу создать отдельную dll, чтобы содержать их, поэтому я могу публиковать свою библиотеку через nuget. Я попытался 3 подхода все неудовлетворительный:Как слить dll в одну dll
подхода 1: В vistual студии, я поставил "Вставить Interop ассамблею" к истинному, я получаю эту ошибку:
Error 2 Cannot embed interop types from assembly 'DiffieHellman.dll' because it is missing the 'GuidAttribute' attribute DiffieHellman.dll
подхода 2: Я использовал ILMergeGUI. Он сгенерировал код для использования в ILMerge, который не работает с ошибкой: Ссылка на объект не установлена в экземпляр объекта. Вот команда:
"C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
/ndebug
/copyattrs
/targetplatform:4.0,"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
/out:"C:\temp\z.dll"
"C:\\FileTube\TestApp\bin\Debug\FileTube.dll"
"C:\\FileTube\TestApp\bin\Debug\DiffieHellman.dll"
"C:\\FileTube\TestApp\bin\Debug\Org.Mentalis.Security.dll"
"C:\\FileTube\TestApp\bin\Debug\Tamir.SharpSSH.dll"
подход 3: Я следовал за этим tutorial использовать отражение, чтобы включить DLL сборки. Разница заключается в том, что учебник имеет основной исполняемый файл и включает DLL в исполняемый файл, в то время как я пытаюсь включить DLL в свою DLL. поэтому я добавил код отражения в конструктор класса моей основной dll. Он компилируется, но это не сработает, если я переименую эту внешнюю dll, что означает, что она не загружает ее.
Любые идеи?
Идея состоит в том, чтобы иметь пакет nuget, который ссылается на другой пакет nuget. Пусть nuget разрешает ссылки, а не пытается перехитрить их. –
Вам нужно будет получить команду ILMerge. Недостаточно панировок, но будьте осторожны, что вы это делаете [опасно неправильно] (http://stackoverflow.com/a/13750130/17034). –
Почему вы объединяете библиотеки DLL в одну DLL. Просто объедините их в исполняемый файл. Я думаю, что ILMerge ожидает, что выход будет exe, а не DLL. Также удалите двойную обратную косую черту в путях, ее тонкость и не справляется с хорошей обработкой исключений. Например, текущая версия ILMerge будет вызывать ту же ошибку, если вы укажете ей пути, в которых есть пробелы. (Кстати, я сливаю тот самый тамир.sharpSS.dll в моем исполняемом файле и ILMerge работает безупречно. Но я объединять его в исполняемый файл (.exe), а не другую DLL. – Hashman