Как использовать Costura.Fody?

738
04 февраля 2017, 07:07

Не могу найти что дальше делать для внедрения dll в exe после

> PM> Install-Package Costura.Fody

Как работает Costura.Fody?

Обновлено:

После добавления

<Target 
    AfterTargets="AfterBuild;NonWinFodyTarget"
    Name="CleanReferenceCopyLocalPaths" >
     <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
  </Target>
</Project>

Файл Resources\7z.dll остался но:

Необработанное исключение типа "System.ArgumentException" в mscorlib.dll >Дополнительные сведения: Путь имеет недопустимую форму.

var currentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
SevenZipCompressor.SetLibraryPath(Path.Combine(currentDir, @"Resources\7z.dll"));

Необработанное исключение типа "System.TypeInitializationException" в SevenZipSharp

Дополнительные сведения: Инициализатор типа "SevenZip.SevenZipLibraryManager" выдал исключение.

InnerException

{"Путь имеет недопустимую форму."}

SevenZipCompressor.SetLibraryPath(@"Resources\7z.dll")

Обновлено2:

Ошибка исчезла после: ссылки-> SevenZipSharp -> Копировать локально-> False

SevenZipCompressor.SetLibraryPath(@"Resources\7z.dll")

Но по прежнему не работает:

var currentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
SevenZipCompressor.SetLibraryPath(Path.Combine(currentDir, @"Resources\7z.dll")); 

Нужно как-то внедрить 7z.dll в exe

Answer 1

Дальше вам делать ничего не нужно, просто собирайте проект как собирали раньше. Зависимые .dll будут вшиты в .exe файл.

Стоит отметить, что Costura.Fody по умолчанию не занимается очисткой папки от сторонних .dll. Чтобы изменить это поведение вы можете добавить следующие строчки в проектный файл

<Target 
    AfterTargets="AfterBuild;NonWinFodyTarget"
    Name="CleanReferenceCopyLocalPaths" >
     <Delete Files="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')" />
</Target>

или просто прописать соответствующую команду:

Install-CleanReferencesTarget

Если вас интересует как это работает то вы можете поразбирать исходники. Они находятся тут

READ ALSO
Странный конструктор

Странный конструктор

Почему в конструкторе используются фигурные скобки?

426
Переопределение GetHashCode

Переопределение GetHashCode

Троелсен в своей книге, советует переопределить метод ToString() у класса(переопределенная версия возвращает строку из полей всего класса через...

466
Dictionary ключем которого является объект

Dictionary ключем которого является объект

Допустим, имеется объект с переопределенным GetHashCode, который я хочу сделать ключемGetHashCode вычисляется, как совокупность GetHashCode всех полей

402
Нужно получить на c# исходный текст html страницы

Нужно получить на c# исходный текст html страницы

И на самом то деле задачка проста!

590