1

ILRepack (ILRepack.MSBuild.Task) がどのように機能するかを理解するために、概念実証を行っています。

この構成により、ClassLibrary1、AutoMapper、および Newtonsoft.Json が正しく内部化された単一のマージされた dll を作成できます。

 <Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
<ItemGroup>
  <InputAssemblies Include="$(OutputPath)\ClassLibrary2.dll" />
  <InputAssemblies Include="$(OutputPath)\ClassLibrary1.dll" />
  <InputAssemblies Include="$(OutputPath)\AutoMapper.dll" />
  <InputAssemblies Include="$(OutputPath)\Newtonsoft.Json.dll" />
</ItemGroup>
<ItemGroup>
  <!-- Must be a fully qualified name -->
  <DoNotInternalizeAssemblies Include="ClassLibrary2" />
</ItemGroup>
<ILRepack Parallel="true" Internalize="true" InternalizeExclude="@(DoNotInternalizeAssemblies)" InputAssemblies="@(InputAssemblies)" TargetKind="Dll" OutputFile="$(OutputPath)\$(AssemblyName).dll" />

ただし、ワイルドカードを使用しようとすると、内部化が機能しません。

 <Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
<ItemGroup>
  <InputAssemblies Include="$(OutputPath)\*.dll" />
</ItemGroup>
<ItemGroup>
  <!-- Must be a fully qualified name -->
  <DoNotInternalizeAssemblies Include="ClassLibrary2" />
</ItemGroup>
<ILRepack Parallel="true" Internalize="true" InternalizeExclude="@(DoNotInternalizeAssemblies)" InputAssemblies="@(InputAssemblies)" TargetKind="Dll" OutputFile="$(OutputPath)\$(AssemblyName).dll" />

なぜこれが起こっているのですか?

編集:ワイルドカードがアセンブリを並べ替えているようです。Automapper は内部化されていませんが (プライマリ アセンブリになるため)、他のすべては内部化されています (ClassLibrary2 を除く。DoNotInternalizeAssemblies がその仕事をしていると思います)。

4

0 に答える 0