一些可能对实施Scott Hanselman解决方案的人有用的更多信息。
当我第一次设置它时,它会抱怨无法解析对System.Core等的引用。这与.NET 4支持有关。包括指向.NET 4 Framework目录的/ lib自变量即可对其进行修复(实际上只包含$(MSBuildBinPath))。
/lib:$(MSBuildBinPath)
然后,我发现IlMerge在合并时会挂起。它使用了一些CPU和大量RAM,但未输出任何内容。我当然找到了解决stackoverflow的方法。
/targetplatform:v4
我还发现,Scott的博客文章中使用的某些MSBuild属性依赖于从项目目录执行MsBuild,因此我对其进行了一些调整。
然后,我将目标&ilmerge.exe移到了源代码树的tools文件夹中,这需要对路径进行另一个小的调整。
我最终得到以下Exec元素,以替换Scott的原始文章中的元素:
<Exec Command=""$(MSBuildThisFileDirectory)Ilmerge.exe" /lib:$(MSBuildBinPath) /targetplatform:v4 /out:@(MainAssembly) "$(MSBuildProjectDirectory)\@(IntermediateAssembly)" @(IlmergeAssemblies->'"%(FullPath)"', ' ')" />
更新
我还发现,如果使用Nuget包,则Logic Labs的答案是保持CopyLocal行为,并仅从CopyLocal中排除ilMerged程序集。否则,您需要为未合并的引用程序集的每个程序包目录指定一个/ lib参数。