问题标签 [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 回答
232 浏览

ilrepack - IL-Repack 处理第三方依赖

我的项目中有一个有效的 IL-Repack 构建后任务。最近,我更新了一些库,现在我遇到了一个我无法解决的问题。

我的项目使用 Newtonsoft.Json,我已将其更新到 v12。我的脚本设置为从 bin 目录中获取所有 dll 并将它们合并。当它到达某个 dll(在这种情况下为 Twilio)时,它会给出此异常。

Mono.Cecil.AssemblyResolutionException:无法解析程序集:'Newtonsoft.Json,版本 = 10.0.0.0,...'。所以我假设 dll 正在寻找 Newtonsoft.Json 但对版本感到困惑?

从 Visual Studio 运行程序没有任何问题。Twilio 需要 Newtonsoft.Json 10+,所以版本 12 是可以的。如何让 IL-Repack 识别 v12 Newtonsoft?我可以看到我在添加 Twilio 之前添加了 Newtonsoft.Json 进行合并。

这适用于 .net 4.7.2。IL-Repack 2.0.18(当前)

0 投票
0 回答
43 浏览

c# - 我们如何从已使用 ILRepack 合并到单个 DLL 的类库项目中调用当前项目中的资源字典

我正在使用 ILRepack 将我的所有类库项目(例如:LibA.dll、LibB.dll、Sri.Theme.dll)合并到一个 DLL(TestFrame.dll)中。我能够合并所有 C# 代码,也能够在我使用合并的 DLL (TestFrame.dll) 的地方访问 c# 逻辑。但问题是我有一个具有 WPF 资源字典的类库 (Sri.Theme.dll),我无法在我的 WPF 项目 App.xaml 中调用这些资源字典。我在 ILSpy 中检查了 TestFrame.dll,这些资源字典被合并到其中。它给出以下错误消息:

找不到资源“styles/bootstrap.xaml”。

Sri.Theme 项目结构如下:

在此处输入图像描述

  • 风格
  • 主题

我在 WpfApp1 的 App.xaml 中尝试这样

尝试1: <ResourceDictionary Source="pack://application:,,,/TestFrame;component/Styles/Bootstrap.xaml"/>

尝试2: <ResourceDictionary Source="pack://application:,,,/Sri.Theme;component/Styles/Bootstrap.xaml"/>

尝试3: <ResourceDictionary Source="pack://application:,,,/TestFrame;component/Sri.Theme/Styles/Bootstrap.xaml"/>

谁能帮我解决这个问题。原谅我语言不好

0 投票
0 回答
82 浏览

c# - NullableAttribute 在另一个模块中声明,需要导入 - ILRepack

所以我正在使用 ILRepack,据我所知,它在幕后使用 Mono.Cecil 来进行 ILWeaving。我在我的项目中遇到了一个问题,一旦我导入就会导致以下错误,例如 Newtonsoft.Json 版本 13.0.1:

我所做的只是将它添加为 PackageReference,在发布模式下构建时,我收到此错误。

我意识到错误消息非常具体,但是经过数小时的尝试解决此问题后,我无法解决。我最大的问题是我不知道“另一个模块”的确切含义。
这是一个完全空的项目,除了使用 ILRepack 包和导入 Newtonsoft.Json。
它的目标netstandard2.0,我需要成为目标。由于...原因,我无法将其更改为较新的版本。
在没有 Newtonsoft.Json 的情况下以发布模式构建。
它也可以在不执行 ILRepack 的调试中构建。
所以这意味着必要的属性必须存在,否则它不会在调试中编译,对吧?

我尝试在我的项目中手动定义此属性,如下所示:

但即便如此,我还是得到了上述错误。那么Mono.Cecil 到底在哪寻找这个属性呢?为什么在我的项目中手动定义它还不够?

我使用的 ILRepack 配置是这样的:

我有哪些选项可以告诉 Mono.Cecil 在哪里查找此属性?或者我可以以某种方式让它完全忽略该属性吗?我不需要使用它,我只需要它来正确编译。

请参阅附加的 output.txt 以获取日志文件: output.txt
在此日志文件中,我还注意到它实际上确实导入了我手动定义的 NullableAttribute: Importing System.Runtime.CompilerServices.NullableAttribute from TestSolution4.dll,但是为什么 Mono.Cecil 不直接使用这个呢?

非常感谢任何帮助!

0 投票
0 回答
48 浏览

c# - 如何使用 ILRepack 合并 C++/CLI 项目 DLL?

我有一个 .NET 解决方案,其中包含 10 个 C# 项目和 2 个 C++/CLI 项目。我已将所有项目从 4.0 版升级到 5.0 版。通过将Common Language Runtime Support设置为/clr:safe并将.Net Core Target Framework设置为.NET 5.0,使用 upgrade-assistant 手动升级 C# 项目和升级 C++/CLI 项目。

我正在使用 ILRepack 合并所有项目的 DLL:

C# 项目成功合并,但如果我尝试合并 C++/CLI 项目 DLL,则会收到以下错误:

无法加载程序集 C:\ProjectPath\bin\net5.0-windows\SolutionName.Project4.dll

尽管文件存在于给定的路径中。

此外,如果我将 C++/CLI 项目定位回 .NET 4.0,则 DLL 将成功合并