【问题标题】:ILMerge questionILMerge 问题
【发布时间】:2011-09-22 01:48:47
【问题描述】:

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

我想为此使用 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 文件中正确声明了任务。

【问题讨论】:

  • 也许您最好寻求有关使用 MSBuild 任务(ILMerge-Tasks 就是这样)和 TFS 的帮助。
  • AssemblhyFile 是否需要完整的文件名而不是程序集命名空间?
  • 我已经尝试使用实际的程序集文件名 ILMerge.MSBuild.Task.dll,但我仍然遇到同样的错误

标签: c# .net assemblies ilmerge


【解决方案1】:

解决了。

  • 我确实使用上面的配置
  • 我确实使用了 ILMerge.MSBuild.Tasks.dll

这是我采取的步骤:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2016-05-13
    相关资源
    最近更新 更多