3

我正在尝试将多个程序集合并为一个作为 WCF 服务的“代理”程序集。目前,由于我的继承方案,代理的用户需要引用包含数据协定的程序集,以及我的域程序集。

我想为此使用 ILMerge。特别是,ILMerge-Tasks 项目看起来很有希望,尤其是他们项目主页中的这一行:

ILMerge-Tasks 项目主页:

...它甚至包括一个合并 ILMerge 和任务 dll 的构建后事件,这样您就可以在不存在 ILMerge.exe 的情况下使用该任务。

这正是我想要完成的,但我真的不知道如何去做。请帮忙!

其他相关(可能)信息:

  • 我们在 TFS 中使用自动构建,因此不存在ilmerge.exe将是一大优势

更新:

所以我在我的项目中包含了 ILMerge.MSBUild.Tasks.dll 并将以下内容添加到我的构建文件中(取自 ilmerge 项目主页):

<Target Name="AfterBuild">

    <UsingTask TaskName="ILMerge.MSBuild.Tasks.ILMerge" 
        AssemblyFile="ILMerge.MSBuild.Tasks.ILMerge"/>
    <ItemGroup>
       <MergeAsm Include="BarProject.dll" />
       <MergeAsm Include="FooProject.dll" />
    </ItemGroup>

    <ILMerge InputAssemblies="@(MergeAsm)" OutputFile="FooBar.dll" />
</Target>

但现在我收到以下错误:

未找到“UsingTask”任务。检查以下内容: 1.) 项目文件中的任务名称与任务类的名称相同。2.) 任务类是“公共的”并且实现了 Microsoft.Build.Framework.ITask 接口。3.) 在项目文件或位于“C:\Windows\Microsoft.NET\Framework\v4.0.30319”目录的 *.tasks 文件中正确声明了任务。

4

1 回答 1

4

解决了。

  • 我没有使用上面的配置
  • 我没有使用ILMerge.MSBuild.Tasks.dll

这是我采取的步骤:

  • 在我的项目中添加了对ILMerge.exe(来自Microsoft Research的)的引用
  • 将此 PostBuild 条目添加到我的 MSBuild 文件 (.csproj) 中:

    ILMerge /out:FooBar.dll Bar.dll Foo.dll

于 2011-09-21T17:43:07.370 回答