Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET v4+;上嵌入\合并.NET v1程序集;装配_C#_Ilmerge - Fatal编程技术网

C# 在.NET v4+;上嵌入\合并.NET v1程序集;装配

C# 在.NET v4+;上嵌入\合并.NET v1程序集;装配,c#,ilmerge,C#,Ilmerge,我有一个C#库,其中包含一些由我们开发的程序集和一些第三方o,我需要将所有内容都放在一个程序集文件中 当我尝试使用ILMerge合并所有内容时,我遇到以下错误: 合并期间发生异常: ILMerge.Merge:程序集“TestLibrary”未标记为 只包含托管代码。(请考虑使用/zeroPeKind选项 --但是请先阅读文档!) em ILMerging.ILMerge.Merge() em ILMerging.ILMerge.Main(字符串[]args) 当我从合并中删除TestLibra

我有一个C#库,其中包含一些由我们开发的程序集和一些第三方o,我需要将所有内容都放在一个程序集文件中

当我尝试使用ILMerge合并所有内容时,我遇到以下错误:

合并期间发生异常:

ILMerge.Merge:程序集“TestLibrary”未标记为 只包含托管代码。(请考虑使用/zeroPeKind选项 --但是请先阅读文档!) em ILMerging.ILMerge.Merge() em ILMerging.ILMerge.Main(字符串[]args)

当我从合并中删除TestLibrary时,它可以正常工作。但是为了让我的项目正常工作,我必须单独引用TestLibrary并启用useLegacyV2RuntimeActivationPolicy=“true”

因此,在进一步研究之后,我决定尝试使用嵌入式资源,使用:

它加载资源字节,但在汇编时失败。加载时表示程序的格式不正确


测试库是C++ .NET V1.0库。

ILIGRUN不能简单地处理包含本机代码的程序集。您必须在使用前在运行时提取dll,或者发送dll。这在

中也有解释,错误信息似乎不言自明。我从来都不明白为什么ILMerge如此流行。VS已经非常支持将程序集合并到单个EXE中,并且没有任何限制。最后一个文件名为setup.exe,您以前肯定使用过它们。将安装项目添加到您的解决方案中。@hans passant我知道这是OT,但我们将其用于内部框架/库。我们有一系列的项目,它们可以做一些奇特的事情,然后将它们合并到一个DLL中,以便在我们的应用程序中使用。这使我们的生活更轻松,因为它减少了所需依赖项的数量,并且“隐藏”了我们不想暴露给调用应用程序的外部实用程序(例如,restsharp)。我们不会合并正在部署的应用程序的程序集,而是使用setup.exe或类似的替代程序。
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
   String resourceName = "AssemblyLoadingAndReflection." +
      new AssemblyName(args.Name).Name + ".dll";
   using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) {
      Byte[] assemblyData = new Byte[stream.Length];
      stream.Read(assemblyData, 0, assemblyData.Length);
      return Assembly.Load(assemblyData);
   }
};