Как импортировать ссылочные проекты в exe? - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть консольное приложение, которое ссылается на другие проекты в решении. Когда я соберу его, он скопирует эти библиотеки в Debug. Я хочу импортировать их в exe. Если я добавляю их в ресурсы, то загружаю оттуда, они не обновляются. Я теряю изменения в ссылочных DLL. Есть ли способ, которым я могу построить их и импортировать их в исполняемый файл каждой сборки?

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

Вы можете использовать ILMerge для объединения нескольких сборок в одну.

0 голосов
/ 22 сентября 2011

Вот решение, которое сработало для меня:

http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx

Он объединяет сборки после каждой сборки с ILMerge (как предложено в комментариях). Мне нужно было обновить файл .targets для .NET Framework 4. На случай, если это кому-нибудь понадобится:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
    <Target Name="AfterBuild"> 
        <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true' and '%(ReferencePath.IlMerge)'=='true'"> 
            <Output TaskParameter="Include" ItemName="IlmergeAssemblies"/> 
        </CreateItem> 
        <Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" /> 
        <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ') /target:exe /targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /wildcards" /> 
    </Target> 
  <Target Name="_CopyFilesMarkedCopyLocal"/> 
</Project>

Обновление

Хотя вышеприведенное решение работает, вы можете упростить его, и вам не понадобятся целевые файлы. Вы можете поместить ILMerge где-нибудь в решении. Затем позвоните оттуда после сборки. ILMerge.exe - это все, что вам нужно, скопируйте его куда-нибудь, например /solutionDirectory/Tools. Напишите команду в командной строке события после сборки.

$(SolutionDir)Tools\ILMerge.exe /out:"$(ProjectDir)bin\Debug\WindowsGUI.exe" "$(ProjectDir)obj\x86\Debug\WindowsGUI.exe" "$(SolutionDir)BusinessLayer\bin\Debug\BusinessLayer.dll" /target:exe /targetplatform:v4,"$(MSBuildBinPath)" /wildcards

После сборки вы получаете .exe со встроенными DLL и можете запускать его самостоятельно.

0 голосов
/ 21 сентября 2011

У Джеффри Рихтера есть статья на эту самую тему:

http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

Ключ

Для каждого добавляемого вами DLL-файла отобразите его свойства и измените его действие сборки на Embedded Resource.

...