Jak zintegrować ILMerge z procesem tworzenia Visual Studio, aby scalić zespoły?
Chcę połączyć jeden zespół DLL. NET i jeden projekt biblioteki klas C#, do którego odwołuje się VB.NET projekt aplikacji konsolowej w jeden plik wykonywalny konsoli wiersza poleceń.
Mogę to zrobić z ILMerge z wiersza poleceń, ale chcę zintegrować to łączenie zestawów referencyjnych i projektów w projekcie Visual Studio. Z lektury rozumiem, że mogę to zrobić poprzez zadanie MSBuild lub cel i po prostu dodać go do pliku projektu C#/VB.NET, ale nie mogę znaleźć żadnego konkretnego przykład ponieważ MSBuild jest dużym tematem. Co więcej, znajduję pewne odniesienia, które dodają polecenie ILMerge do zdarzenia Post-build.
Jak zintegrować ILMerge z projektem Visual Studio (C# / VB. NET), które są tylko projektami MSBuild, aby scalić wszystkie odwołane zespoły (copy-local=true) w jeden zespół?
Jak to ma związek z potencjalnym ILMerge.Akta celów?
Czy lepiej jest użyć zdarzenia Post-build?
8 answers
" MSBuild ILMerge task " (lub MSBuild.ILMerge.Task
) pakiet NuGet sprawia, że proces ten jest dość prosty. Domyślnie łączy wszelkie odniesienia "copy local"do głównego zestawu.
Uwaga: chociaż pakiety mają podobne nazwy, ten różni się od ILMerge.MSBuild.Tasks
, o którym wspomniał Davide Icardi w swojej odpowiedzi . Ten, który sugeruję, został po raz pierwszy opublikowany w sierpniu 2014.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:27
Kilka informacji, które mogą być przydatne dla niektórych osób wdrażających rozwiązanie Scotta Hanselmana .
Kiedy po raz pierwszy skonfigurowałem to, narzekało, że nie jest w stanie rozwiązać odniesień do systemu.Rdzeń itp. Jest to coś wspólnego z obsługą. NET 4. Dodanie argumentu / lib wskazującego na katalog. NET 4 Framework naprawia to (w rzeczywistości wystarczy podać $(MSBuildBinPath)).
/lib:$(MSBuildBinPath)
Potem odkryłem, że IlMerge zawiśnie podczas łączenia. To było za pomocą trochę CPU i dużo pamięci RAM, ale nic nie wyprowadzał. Znalazłem poprawkę na stackoverflow oczywiście .
/targetplatform:v4
Odkryłem również, że niektóre właściwości MSBuild użyte w artykule Scotta na blogu polegały na wykonaniu MsBuild z katalogu projektu, więc trochę je poprawiłem.
Potem przesunąłem cele i ilmerge.exe do folderu tools w naszym drzewie źródłowym, który wymagał kolejnego małego poprawki do ścieżek...
W końcu skończyłem z następującymi Exec element zastępujący ten w oryginalnym artykule Scotta:
<Exec Command=""$(MSBuildThisFileDirectory)Ilmerge.exe" /lib:$(MSBuildBinPath) /targetplatform:v4 /out:@(MainAssembly) "$(MSBuildProjectDirectory)\@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
Aktualizacja Znalazłem również odpowiedź laboratoria logiczne na temat zachowania CopyLocal i wyłączenia zespołów ilMerged z CopyLocal essential, jeśli używasz pakietów Nuget. W przeciwnym razie musisz podać argument /lib dla każdego katalogu pakietów odwołanych zestawów, które nie są scalane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:59
Tutaj alternatywne rozwiązanie:
1) Zainstaluj ILMerge.MSBuild.Pakiet zadań z nuget
PM> Install-Package ILMerge.MSBuild.Zadania
2) edytuj*.plik csproj projektu, który chcesz scalić, dodając poniższy kod:
<!-- Code to merge the assemblies into one:setup.exe -->
<UsingTask TaskName="ILMerge.MSBuild.Tasks.ILMerge" AssemblyFile="$(SolutionDir)\packages\ILMerge.MSBuild.Tasks.1.0.0.3\tools\ILMerge.MSBuild.Tasks.dll" />
<Target Name="AfterBuild">
<ItemGroup>
<MergeAsm Include="$(OutputPath)$(TargetFileName)" />
<MergeAsm Include="$(OutputPath)LIB1_To_MERGE.dll" />
<MergeAsm Include="$(OutputPath)LIB2_To_MERGE.dll" />
</ItemGroup>
<PropertyGroup>
<MergedAssembly>$(ProjectDir)$(OutDir)MERGED_ASSEMBLY_NAME.exe</MergedAssembly>
</PropertyGroup>
<Message Text="ILMerge @(MergeAsm) -> $(MergedAssembly)" Importance="high" />
<ILMerge InputAssemblies="@(MergeAsm)" OutputFile="$(MergedAssembly)" TargetKind="SameAsPrimaryAssembly" />
</Target>
3) Zbuduj swój projekt jak zwykle.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-19 00:08:44
Artykuł mieszanie języków w jednym montażu w Visual Studio bezproblemowo z ILMerge i MSBuild w http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx pokazuje jak używać ILMerge i MSBuild w projekcie Visual Studio.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-31 20:43:19
Jeden numer znalazłem w artykule: http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx.
Jeśli masz jakieś odniesienia, których nie chcesz ILMerge, kod w artykule nie powiedzie się, ponieważ nadpisuje domyślne zachowanie CopyLocal, aby nic nie robić.
Aby to naprawić-zamiast:
<Target Name="_CopyFilesMarkedCopyLocal"/>
Dodaj ten wpis do pliku docelowego (tylko. NET 3.5) (aby odfiltrować nie-ilmerge pliki copylocal i traktować je jako normalne)
<Target Name="AfterResolveReferences">
<Message Text="Filtering out ilmerge assemblies from ReferenceCopyLocalPaths" Importance="High" />
<ItemGroup>
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.IlMerge)'=='true'" />
</ItemGroup>
</Target>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-07 20:40:14
Jest to świetny artykuł , który pokaże Ci, jak scalić odwołane Zespoły do wyjściowego zestawu. Pokazuje dokładnie, jak scalić zespoły za pomocą msbuild.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-22 12:29:53
Zobacz ten artykuł Jomo. Ma szybki proces włamania ILMerge do systemu msbuild
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-31 20:46:31
Moje 2 centy-odebrałem odpowiedź @ Jason i sprawiłem, że działa dla mojego rozwiązania, w którym chciałem wygenerować *.exe w folderze bin/Debug z all *.biblioteki DLL w tym samym folderze.
<Exec Command=""$(SolutionDir)packages\ILMerge.2.13.0307\Ilmerge.exe" /wildcards /out:"$(SolutionDir)..\$(TargetFileName)" "$(TargetPath)" $(OutDir)*.dll" />
Uwaga: To rozwiązanie jest oczywiście zakodowane na twardo w wersji pakietu ILMerge nuget. Daj mi znać, jeśli masz jakieś sugestie do poprawy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 18:46:36