我在Visual Studio中有一个包含5个项目的解决方案。他们是:
Foo.Core
:核心功能Foo.Api
:生成在核心Foo.Web
:特定于网络的扩展程序Foo.Web.Mvc
:MVC特定扩展程序Newtonsoft.Json
:第三方图书馆我想使用ILMerge将Foo.Core
,Foo.Api
和Newtonsoft.Json
合并到一个名为Foo
的程序集中。这很容易。
我遇到的问题是Foo.Web
和Foo.Web.Mvc
都需要引用所有三个合并的程序集。
如果我引用原始程序集,则在执行ILMerge后它们将具有无效引用。
如果我引用ILMerged程序集,我必须引用一个调试程序集,然后在我打包之前更改它,这似乎并不理想。
我尝试创建一个名为Foo
的项目,该项目引用3个合并的程序集并用ILmerged程序集替换它自己的输出,但这似乎根本不起作用。
有可靠的方法吗?
答案 0 :(得分:3)
我知道我来这场比赛已经很晚了,但我们正在努力解决这个问题,这就是我们解决问题的方法。
首先,我们编辑了所有非合并或卫星项目的csproj文件,以便根据文件的存在将conditional reference用于外部程序集。在这种情况下,我们将测试合并程序集的存在。然后我们运行了一个构建脚本,它执行以下操作:
答案 1 :(得分:2)
ILMerge旨在创建一个新的包/组件作为盒装'产品'(API,Program ...),以简化装配管理,如部署,gac参考,装配可视性等,或者用于一体化使用或更多外用,不混合。
我猜您必须在主要程序集/项目PostBuildEvent
上设置Foo.Api
,如果您的PreBuildEvent
和Foo.Web
中有一个或Foo.Web.Mvc
{1}}生成合并Foo
的项目,将作为外部程序集在Foo.Web
和Foo.Web.Mvc
项目中引用。
您可以通过设置MsBuild任务使其在Visual Studio中更加集成。一个sample(来自 Stackoverflow)。