引用在Visual Studio项目中使用ILMerge创建的程序集

时间:2010-05-06 03:19:30

标签: .net ilmerge

我在Visual Studio中有一个包含5个项目的解决方案。他们是:

  • Foo.Core :核心功能
  • Foo.Api :生成在核心
  • 之上的代码
  • Foo.Web :特定于网络的扩展程序
  • Foo.Web.Mvc :MVC特定扩展程序
  • Newtonsoft.Json :第三方图书馆

我想使用ILMerge将Foo.CoreFoo.ApiNewtonsoft.Json合并到一个名为Foo的程序集中。这很容易。

我遇到的问题是Foo.WebFoo.Web.Mvc都需要引用所有三个合并的程序集。

如果我引用原始程序集,则在执行ILMerge后它们将具有无效引用。

如果我引用ILMerged程序集,我必须引用一个调试程序集,然后在我打包之前更改它,这似乎并不理想。

我尝试创建一个名为Foo的项目,该项目引用3个合并的程序集并用ILmerged程序集替换它自己的输出,但这似乎根本不起作用。

有可靠的方法吗?

2 个答案:

答案 0 :(得分:3)

我知道我来这场比赛已经很晚了,但我们正在努力解决这个问题,这就是我们解决问题的方法。

首先,我们编辑了所有非合并或卫星项目的csproj文件,以便根据文件的存在将conditional reference用于外部程序集。在这种情况下,我们将测试合并程序集的存在。然后我们运行了一个构建脚本,它执行以下操作:

  1. 构建解决方案。
  2. 在主要程序集上运行ILMerge,输出为条件引用中的文件。
  3. 重建解决方案,但这次因为合并的程序集存在,非合并或附属程序集现在将具有正确的引用。

答案 1 :(得分:2)

ILMerge旨在创建一个新的包/组件作为盒装'产品'(API,Program ...),以简化装配管理,如部署,gac参考,装配可视性等,或者用于一体化使用或更多外用,不混合。

我猜您必须在主要程序集/项目PostBuildEvent上设置Foo.Api,如果您的PreBuildEventFoo.Web中有一个或Foo.Web.Mvc {1}}生成合并Foo的项目,将作为外部程序集在Foo.WebFoo.Web.Mvc项目中引用。

您可以通过设置MsBuild任务使其在Visual Studio中更加集成。一个sample(来自 Stackoverflow)。