visual tag studio rendimiento muy mejorar lento como code closing brackethighlighter acelerar visual-studio visual-studio-2008 msbuild ilmerge

visual-studio - tag - visual studio 2017 muy lento



¿Cómo integrar ILMerge en el proceso de compilación de Visual Studio para combinar ensamblajes? (8)

Algo más de información que podría ser útil para algunas personas que implementan la solución de Scott Hanselman .

Cuando lo configuré por primera vez me quejaba de que no podía resolver las referencias a System.Core, etc. Tiene algo que ver con el soporte de .NET 4. Incluir un argumento / lib apuntando al directorio .NET 4 Framework lo corrige (de hecho solo incluye el $ (MSBuildBinPath)).

/lib:$(MSBuildBinPath)

Luego descubrí que IlMerge se colgaría mientras se fusionaba. Estaba usando un poco de CPU y mucha RAM, pero no estaba produciendo nada. Encontré la solución en stackoverflow, por supuesto .

/targetplatform:v4

También encontré que algunas de las propiedades de MSBuild utilizadas en el artículo de blog de Scott se basaban en la ejecución de MsBuild desde el directorio del proyecto, así que las modifiqué un poco.

Luego moví los objetivos & ilmerge.exe a la carpeta de herramientas de nuestro árbol fuente, que requirió otro pequeño ajuste en las rutas ...

Finalmente terminé con el siguiente elemento Exec para reemplazar el que figura en el artículo original de Scott:

<Exec Command="&quot;$(MSBuildThisFileDirectory)Ilmerge.exe&quot; /lib:$(MSBuildBinPath) /targetplatform:v4 /out:@(MainAssembly) &quot;$(MSBuildProjectDirectory)/@(IntermediateAssembly)&quot; @(IlmergeAssemblies->''&quot;%(FullPath)&quot;'', '' '')" />

ACTUALIZACIÓN También encontré la respuesta de Logic Labs acerca de mantener el comportamiento de CopyLocal y solo excluir los ensambles ilMerged de CopyLocal essential si está usando paquetes de Nuget. De lo contrario, debe especificar un argumento / lib para cada directorio de paquete de conjuntos referenciados que no se combinen.

Quiero fusionar un ensamblado DLL de .NET y un proyecto de Biblioteca de clases de C # referenciado por un proyecto de aplicación de consola VB.NET en un ejecutable de consola de línea de comandos.

Puedo hacer esto con ILMerge desde la línea de comandos, pero quiero integrar esta combinación de ensamblados de referencia y proyectos en el proyecto de Visual Studio. Según mis lecturas, entiendo que puedo hacerlo a través de una tarea de MSBuild o un objetivo y simplemente lo agregué a un archivo de proyecto C # / VB.NET, pero no puedo encontrar ningún ejemplo específico ya que MSBuild es un tema extenso. Además, encuentro algunas referencias que agregan el comando ILMerge al evento Post-build.

  1. ¿Cómo integro ILMerge en un proyecto de Visual Studio (C # / VB.NET), que son solo proyectos de MSBuild, para fusionar todos los ensamblados a los que se hace referencia (copy-local = true) en un ensamblaje?

  2. ¿Cómo se relaciona esto con un posible archivo ILMerge.Targets?

  3. ¿Es mejor usar el evento Post-build?


Aquí una solución alternativa:

1) Instalar el paquete ILMerge.MSBuild.Tasks de nuget

PM> Install-Package ILMerge.MSBuild.Tasks

2) Edite el archivo * .csproj del proyecto que desea combinar agregando el siguiente código:

<!-- 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) -&gt; $(MergedAssembly)" Importance="high" /> <ILMerge InputAssemblies="@(MergeAsm)" OutputFile="$(MergedAssembly)" TargetKind="SameAsPrimaryAssembly" /> </Target>

3) Construye tu proyecto como de costumbre.



Este es un excelente article que le mostrará cómo combinar sus ensamblajes referenciados en el ensamblaje de salida. Muestra exactamente cómo combinar ensamblajes usando msbuild.



Mis 2 centavos - Elegí la respuesta de @ Jason y lo hice funcionar para mi solución donde quería generar el * .exe en la carpeta bin / Debug con todos * .dlls dentro de la misma carpeta.

<Exec Command="&quot;$(SolutionDir)packages/ILMerge.2.13.0307/Ilmerge.exe&quot; /wildcards /out:&quot;$(SolutionDir)../$(TargetFileName)&quot; &quot;$(TargetPath)&quot; $(OutDir)*.dll" />

Nota: Esta solución obviamente está codificada en la versión del paquete nuget de ILMerge. Por favor, avíseme si tiene alguna sugerencia para mejorar.


Un problema que encontré con el artículo en: http://www.hanselman.com/blog/MixingLanguagesInASingleAssemblyInVisualStudioSeamlesslyWithILMergeAndMSBuild.aspx .

Si tiene referencias de que no desea ILMerge, el código del artículo falla porque anula el comportamiento predeterminado de CopyLocal para no hacer nada.

Para solucionar esto, en lugar de:

<Target Name="_CopyFilesMarkedCopyLocal"/>

Agregue esta entrada al archivo de objetivos en su lugar (solo .NET 3.5) (para filtrar los archivos copylocal que no sean de ilmerge y trátelos como lo hace normalmente)

<Target Name="AfterResolveReferences"> <Message Text="Filtering out ilmerge assemblies from ReferenceCopyLocalPaths" Importance="High" /> <ItemGroup> <ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="''%(ReferenceCopyLocalPaths.IlMerge)''==''true''" /> </ItemGroup> </Target>


El paquete NuGet " MSBuild ILMerge task " (o MSBuild.ILMerge.Task ) hace que este proceso sea bastante simple. Por defecto, fusiona cualquier referencia de "copia local" en su ensamblaje principal.

Nota: Aunque los paquetes tienen nombres similares, este es diferente de ILMerge.MSBuild.Tasks que Davide Icardi mencionó en su answer . El que sugiero aquí fue publicado por primera vez en agosto de 2014.