J'utilise le paquet NuGet MSBuild.ILMerge.Task
afin de combiner les dlls externes .NET en un seul fichier exécutable. Cela fonctionne à merveille.
Maintenant, quand j'essaie d'éditer pendant le débogage, Visual Studio dit :
Les modifications ne sont pas autorisées si l'assemblage n'a pas été chargé.
Je suppose que c'est l'inconvénient d'avoir toutes les dépendances dans un seul .exe (je n'en suis pas sûr, c'est juste une supposition).
Mais de toute façon, il serait logique d'avoir MSBuild.ILMerge.Task
sur Build, mais inactif sur Debug. Quelqu'un sait-il comment réaliser cela ?
Notez que lorsque MSBuild.ILMerge.Task
est installé via NuGet, lorsque vous cliquez sur "rebuild", il crée automatiquement l'unique .exe (en laissant le fichier .config à l'extérieur, bien sûr, plus un .pdb). Vous n'avez pas besoin de configurer quoi que ce soit, et c'est pourquoi je ne suis pas en mesure de deviner le fonctionnement interne du processus et comment le désactiver.
Pour plus d'informations, je suis en train d'écrire un billet de blog sur ILMerge. J'essaie de documenter tous les modes d'emploi, les problèmes et les avertissements :
http://localcode.wikidot.com/merge-all-binary-files-dll-s-etc-into-a-single-exe
Edit1 : J'ai remarqué que le paquet NuGet définit automatiquement un fichier .props
avec les informations suivantes :
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
J'ai commencé à chercher DefaultTargets="Build"
et un moyen de le désactiver sur le débogage, et j'ai trouvé ce poste qui semble expliquer comment.
Edit2 :
Si j'enlève ces lignes de mon .csproj, alors la compilation d'ILMerge s'effectue correctement :
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.props'))" />
<Error Condition="!Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets'))" />
</Target>
<Import Project="..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets" Condition="Exists('..\packages\MSBuild.ILMerge.Task.1.0.5\build\MSBuild.ILMerge.Task.targets')" />
C'est quelque chose, mais ça a l'air un peu artisanal et peu pratique pour le moment...