Static linking DLL to EXE in C Sharp

Q1. C Sharpでexeに複数DLLをスタティックリンクさせて1ファイルにすることはできますか? C、C++ではおなじみのスタティックリンクだが、そもそもC Sharpではスタティックリンクができない。ただし MS Research謹製のILMergeを使えば実行ファイル(exe)に対して複数のクラスアセンブリ(DLL)を1つのアセンブリにマージすることはできる。使い方はこちらが参考になる。また、ILMerge-GUIというGUIツールもある。 Q2. Visual Studioのビルドでも自動的に複数ファイルを1つにまとめることはできますか? パッケージマネージャーでILMerge.MSBuild.Tasksをインストールして*.csprojファイルに自動アセンブリ生成するための設定を追記するとVSのビルドで複数ファイルが1つのアセンブリにマージされたファイルが自動的にできあがる。参考: StackOverflow 「How to Integrate ILMerge into Visual Studio Build Process to Merge Assemblies?」 ILMerge.MSBuild.Tasksをインストール Install-Package ILMerge.MSBuild.Tasks *.csprojファイルに下記設定を追記 <!-- Code to merge the assemblies into one --> <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)追加するDLLファイル名1" /> <MergeAsm Include="$(OutputPath)追加するDLLファイル名2" /> ... <MergeAsm Include="$(OutputPath)追加するDLLファイル名N" /> </ItemGroup> <PropertyGroup> <MergedAssembly>出力する結果アセンブリファイル名(フルパス)</MergedAssembly> </PropertyGroup> <Message Text="ILMerge @(MergeAsm) -&gt; $(MergedAssembly)" Importance="high" /> <ILMerge InputAssemblies="@(MergeAsm)" OutputFile="$(MergedAssembly)" TargetKind="SameAsPrimaryAssembly" /> </Target> </Project> VSビルド実行で、マージされたファイルが生成(*....

September 9, 2015 · 1 min · Yoichi Kawasaki