问题标签 [ilrepack]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
526 浏览

.net - 在 .netstandard 项目中使用 ilrepack 合并来自 nuget 包的所有程序集

我正在从 .NetStandard 项目构建一个公共 nuget 包。该项目也使用了针对 .netStandard 的私有 nuget 包(来自私有 nuget 服务器)。

在切换到 .net 标准之前,nuget 引用位于 package.config 中,并且构建项目会导致所有引用的程序集都被复制到 bin/release 文件夹中。从那里可以很容易地在后期构建任务中使用 ilrepack。

现在项目使用 project.json 来引用 nuget 包,构建项目后,bin/Release 文件夹只包含主程序集,而不包含来自引用的 nuget 包的程序集。

您将如何从那里使用 ilrepack ?

通过添加对该项目的引用,我应该能够在同一解决方案中的另一个项目中引用重新打包的程序集。还能做吗?(使用 package.config 时它正在工作)

0 投票
0 回答
521 浏览

ilrepack - ILRepack (ILRepack.MSBuild.Task) 在使用通配符时无法使用 Internalize

我正在做概念验证以了解 ILRepack (ILRepack.MSBuild.Task) 的工作原理。

使用此配置,我可以创建一个合并的 dll,其中 ClassLibrary1、AutoMapper 和 Newtonsoft.Json 正确内部化:

但是,当我尝试使用通配符时, internalize 不起作用:

知道为什么会这样吗?

编辑:看起来通配符重新排序程序集。Automapper 没有内化(因为成为主程序集),但所有其他都是(除了 ClassLibrary2,我想 DoNotInternalizeAssemblies 可以完成它的工作)

0 投票
0 回答
127 浏览

c# - ILRepack 之后类型转换不再起作用

我正在尝试从项目的二进制文件创建单个可执行文件。这就是我所拥有的:

  • 一个共享库 dll,用 F# 编写,我将引用它A
  • 一个库 dll,用 C# 编写,实现IModule来自A. 我将这个库称为B
  • 一个用 F# 编写的可执行文件,它在引导时检测IModule接口的所有可用实现A并实例化相应的类型 - 在B. 我将可执行文件称为C

所有项目都面向 .NET 4.0;F# 项目使用 F# 3.0 (FSharp.Core 4.3.0.0),我使用的是 Visual Studio 2017 Community。

当文件没有打包在一起时,所有逻辑都可以正常工作(就像从 exe 项目的 bin/Debug 目录运行一样)。当我生成合并的可执行文件(使用ILRepack)时,可执行文件中的逻辑不再检测B来自A. 特别是,我有以下检查:

A这是我用来检测IModule实现的代码片段。我想 ILRepack 合并会导致某些类型信息在此过程中丢失,从而阻止上述行工作。

我用来完成这项工作的一个解决方案是A从合并的 exe 中排除该库,然后将其带上。

有没有办法仍然有一个可执行文件并让类型检测工作?我更喜欢使用与上述接口检测类似的方法,因为一旦找到所需的类型,我需要将它们强制转换IModule为以便在我的代码中进一步使用它们。

我的目标是将上述 3 个库捆绑在一个可执行文件中。但是,我还想要其他 dll 文件,这些文件IModule从可执行文件中实现A并放置在可执行文件之外。这些 dll 将独立于 .dll 开发AB并且C它们在合并的可执行文件周围的存在将根据我的用例而有所不同。出于同样的原因,我不能让他们工作。

请注意,出于显而易见的原因,我还将 FSharp.Core dll 包含在打包的可执行文件中。

0 投票
1 回答
4852 浏览

c# - 带有 MSBuild 的 .Net Core 项目的 ILRepack

我想将ILRepack集成到我的 MSBuild 管道中,用于 .Net Core 项目,以将所有必需的 dll 合并到单个 exe/dll 中。

有用的 NuGet-PackageILRepack.MSBuild.Task似乎非常适合,但是 GitHub 自述文件中的示例对 .Net Core 项目不太适用,我不知道如何更改它以与 .Net Core 项目兼容:

澄清:

我只想使用.csproj.Net-Core 引入的 -Format 但实际上使用net461as TargetPlatform

0 投票
0 回答
152 浏览

c# - XML 序列化类由于其保护级别和 ILRepack 而无法访问

我收到以下错误:

由于其保护级别而无法访问。只能处理公共类型。在 System.Xml.Serialization.TypeDesc.CheckSupported()

在我用于反序列化 XML 的模型类上。只有当我使用ILRepack. 如果我不合并程序集或排除包含它工作的模型类的程序集。

0 投票
1 回答
49 浏览

c# - 是否可以不加载某些 NuGet 依赖项?

我已将一些 .net 标准项目 dll 合并到一个大 dll MergedAssemblies.dll 中。现在我有一个使用 MergedAssemblies.dll 并且还引用了 Nuget1 的 xamarin 应用程序。

不幸的是,Nuget1 有自己的依赖项,其中一些依赖项已经合并到 MergedAssemblies.dll 中。现在,当 xamarin 应用程序构建时,它无法解决某些类型,因为它们存在于 2 个地方。

是否可以不加载 Nuget1 的某些依赖项,因为它们已经加载到 MergedAssemblies.dll 中?

有没有另一种解决这个问题的方法?

我无法将 Nuget1 直接合并到 MergedAssemblies.dll 中,因为它不兼容。

0 投票
0 回答
76 浏览

c# - XAMARIN - Mono.Android - 预验证类中的类引用解析为意外实现

我使用 ILRepack 将一堆 DLL 合并到最终的 Merged.dll 中

一些合并的 DLL 使用 Mono.Android.dll 功能,我不想将其合并,因为我认为它是错误的,并且输出程序集将达到 ~30MB。

这就是为什么我没有合并它,而是使用/libILRepack 的特性来指定引用。 /lib:C:\.MonoAndroidPath.\v8.1是 xamarin 解决方案也使用的 Mono.Android.dll 的路径。

当我Merged.dll在应用程序中使用时,它会编译但是当应用程序即将启动时我得到

Java.Lang.IllegalAccessError:预验证类中的类引用解析为意外实现

有没有办法解决这个问题?

如果单独添加所有 DLL,则该解决方案确实有效。

编辑:

java.lang.IllegalAccessError:预验证类中的类引用解析为在运行测试项目时意外实现?

我确实通读了这篇文章和类似的文章,但它们与 Android 解决方案有关,而不是与 Xamarin 解决方案有关。到目前为止,我无法将那里提供的解决方案翻译成我的案例。所以请不要关闭这个问题,因为它仍然相关。

0 投票
1 回答
1473 浏览

c# - 使用 Visual Studio 2017 构建的 .NET 4.7.2 C# 控制台应用程序的 ILRepack 需要在 Windows 7 上安装框架

我有以下构建后事件,它应该将所有 .NET 框架依赖项打包到 .exe 中:

但它不能打包所有东西,因为当我在准系统 Windows 7 x64 VM 中运行它时,弹出窗口说需要 .NET。安装 .NET 4.7.2 后一切正常。

这是 ILRepack 输出:

这是一个使用“任何 CPU”构建的 C# 控制台应用程序。

我的解决方案中的另外两个项目是 .NET 4.7.2 桌面类库。

我也尝试过 ILMerge,但它失败了,因为它引用了它无法遵循的第三方库。我已将该参考作为资源嵌入到我的应用程序中,并且工作正常。

0 投票
0 回答
463 浏览

c# - ILMerge 或 ILRepack 将程序集引用添加到 dll

我正在使用指定依赖项的 nuspec 创建自定义包。我还将几个 dll 合并到一个 dll 中。

我需要引用一个外部 dll,以便合并的 dll 不包含外部 dll。

我执行了以下命令:

ProjectC.dll 依赖于一个名为 ProjectZ.dll 的外部包,我需要将 ProjectZ.dll 添加为外部依赖项,而不是包含在 ProjectA.dll 中。

在参数中运行没有 ProjectZ.dll 的命令我得到错误:

示例 Moq.dll 具有 Castle.Core 的引用程序集:

在此处输入图像描述 我怎样才能做到这一点?

0 投票
0 回答
232 浏览

c# - (重新)成功构建后的编译错误

我目前的问题是我想使用 ILRepack 将所有我需要的“参考”合并到一个 .exe 中,但它没有按预期工作。

目前在我的项目中使用 C# .NET 4.8,我有 3 个要合并的 .dll。.exe 本身可以工作,但 IRL 不会重新打包它们。小旁注,我只是以 x64“格式”发布/调试我的 .exe,因此为什么一切都设置为那个,但这不应该是问题:/

就像它在尝试重新包装时崩溃一样。

我当前的 .csproj aka MSBuildTask (应该只在我构建它所做的“发布”时触发。)

我得到的错误(+ 一个警告):

我的整个 .csproj