相关疑难解决方法(0)

使用ILMerge和.NET 4库

两个问题:

1)ILMerged程序集中不包含基本.NET程序集

从.NET 3.5/Visual Studio 2008升级到.NET 4/Visual Studio 2010后,我在后期构建中使用ILMerge时遇到问题.我有一个解决方案,其中有几个项目的目标框架设置为".NET Framework 4" .我使用以下ILMerge命令将单个项目DLL合并到一个DLL中:

if not $(ConfigurationName) == Debug
  if exist "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
    "C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe"
      /lib:"C:\Windows\Microsoft.NET\Framework64\v4.0.30319"
      /lib:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies"
      /keyfile:"$(SolutionDir)$(SolutionName).snk"
      /targetplatform:v4
      /out:"$(SolutionDir)bin\development\$(SolutionName).dll"
      "$(SolutionDir)Connection\$(OutDir)Connection.dll"
      ...other project DLLs...
      /xmldocs 
Run Code Online (Sandbox Code Playgroud)

如果我不指定.NET 4框架目录的位置,我会从ILMerge得到"Unresolved assembly reference not allowed:System"错误.如果我不指定MSTest目录的位置,我得到"不允许未解析的程序集引用:Microsoft.VisualStudio.QualityTools.UnitTestFramework"错误.

上面的ILMerge命令工作并生成DLL.但是,当我在另一个.NET 4 C#项目中引用该DLL并尝试使用其中的代码时,我收到以下警告:

无法解析主要引用"MyILMergedDLL",因为它对.NET Framework程序集"mscorlib,Version = 4.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"具有间接依赖性,其版本"4.0.65535.65535"高于版本当前目标框架中的"4.0.0.0".

如果我然后删除该/targetplatform:v4标志并尝试使用MyILMergedDLL.dll,我收到以下错误:

"System.Xml.Serialization.IXmlSerializable"类型在未引用的程序集中定义.您必须添加对程序集'System.Xml,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.

看起来我不应该这样做.使用我的MyILMergedDLL.dll API的人不应该添加对它引用的任何库的引用.我怎么能绕过这个?

2)仅在使用合并程序集时出现TypeLoadException

编辑:除此之外,即使我System.Xml在使用MyILMergedDLL.dll的使用者项目中添加引用,使用MyILMergedDLL.dll中的一些代码也会产生以下异常:

System.TypeLoadException:无法从程序集'MyILMergedDLL,Version = 1.0.1.1,Culture = neutral,PublicKeyToken = …

.net dll ilmerge assemblies c#-4.0

51
推荐指数
2
解决办法
6万
查看次数

ILMerge挂起合并

我正在使用ILMerge来组合使用C#.NET 4编写的9个.NET DLL.问题是ILMerge卡住了,没有错误消息或任何东西.

日志显示ILMerge正确合并所有程序集,然后设置为编写目标程序集.它运行程序集解析器为一堆引用,然后..没有.成功解析System.Configuration后,日志不会显示任何其他内容.

该程序继续使用CPU,但我不知道它是否正在做任何事情.

其他人有类似的经历吗?

.net ilmerge

41
推荐指数
1
解决办法
5612
查看次数

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

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

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

我想使用ILMerge进行合并Foo.Core,Foo.Api并将Newtonsoft.Json其调用到单个程序集中Foo.这很容易.

我遇到的问题是,Foo.WebFoo.Web.Mvc都需要引用所有三个合并组件.

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

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

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

有可靠的方法吗?

.net ilmerge

5
推荐指数
1
解决办法
1420
查看次数

标签 统计

.net ×3

ilmerge ×3

assemblies ×1

c#-4.0 ×1

dll ×1