相关疑难解决方法(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万
查看次数

Visual Studio中的.NET项目是否总是编译成单个文件?

这是一件非常简单的事情,没有人能够在我读过的任何教程中说出来.

我一直在创建一些独立的.NET应用程序以及一些基于DLL的其他程序插件.我注意到Visual Studio中的项目,至少使用Windows应用程序和类库,编译成单个文件(EXE或DLL).

总是这样吗?在组织更大的应用程序方面,我是否应该始终将Visual Studio中的项目视为与最终程序中的单个文件相对应?

.net projects visual-studio

7
推荐指数
1
解决办法
1974
查看次数

何时以及如何将ILMerge与Visual Studio Project/Solution一起使用

我正在开发一个中型企业应用程序.有很多项目/解决方案.例如:

  • Company.Data
    • Company.Data.LinqToSql
  • Company.Entities(业务对象)
  • Company.BLL

然后我有一些应用程序 - 例如Windows服务:MyWindowsService.

当我部署它时(通过创建一个安装项目),它会从上述项目的输出中安装一堆DLL.

这是我应该使用ILMerge的地方吗?创建一个程序集....例如Company.dll?

我如何将其整合到我的构建过程中?

ilmerge build-process visual-studio

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