如何在 D365 中用另一个 DLL 合并替换 ILMerge 和 ILMerge Task

问题描述 投票:0回答:1

我在使用 ILMerge 时遇到了各种各样的问题,因此我决定放弃它。 太糟糕了,我无法做任何其他事情。

我当前正在处理的项目是一个包含 Dynamics 365 工作流/操作的外部包的程序集。 当我尝试添加 Microsoft Graph 包时,我开始遇到这个问题。而且 ILMerge 似乎并没有让它进入程序集。

我尝试使用LibZ并认为我的情况是场景1,但我没有得到我希望的结果。 我发现可以使用 LibZ 的方法是打开 NuGet 包控制台,cd 到我的 bin/Release 文件夹并运行:

libz inject-dll --assembly MyAssembly.dll --include *.dll --exclude MyAssembly.dll --move

这修改了我的程序集,但不是以我预期的方式。

这是使用 ILSpy 的比较(您可以使用“winget install XP8C26VDWLP4T4”安装它):

IL合并: ILMerge Assembly through ILSpy

LibZ LibZ Assembly through ILSpy

LibZ 程序集确实使用插件注册工具加载,但一切都中断,没有工作流程或工作。 我是否错误地使用了 LibZ,或者也许还有另一种方法来合并程序集,使其看起来像有效的版本?

dynamics-crm microsoft-dynamics
1个回答
0
投票

对于 Dataverse,现在推荐的方法是使用 插件包。但是,这不是本地安装的选项。这里也不支持经典的工作流程活动。

但是,对于 ILMerge 来说,一个不错的选择是 ILRepack

请按照以下步骤操作:

  1. 将对 NuGet 包
    ILRepack.Lib.MSBuild.Task
    的引用添加到您的插件项目中。
  2. 将 XML 文件添加到名为
    ILRepack.targets
    的项目中。
  3. 在 XML 中设置配置。

示例

<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="ILRepacker" AfterTargets="Build">
    <ItemGroup>
      <InputAssemblies Include="$(OutputPath)$(TargetName)$(TargetExt)" />
      <InputAssemblies Include="$(OutputPath)Another.Library.dll" />
      <InputAssemblies Include="$(OutputPath)Newtonsoft.Json.dll" />
    </ItemGroup>
    <ILRepack
        Parallel="true"
        Internalize="true"
        InternalizeExclude="@(DoNotInternalizeAssemblies)"
        InputAssemblies="@(InputAssemblies)"
        LibraryPath="$(OutputPath)"
        Wildcards="false"
        TargetKind="SameAsPrimaryAssembly"
        DebugInfo="true"
        KeyFile="$(SolutionDir)YourKey.snk"
        OutputFile="$(OutputPath)Merged\$(AssemblyName).dll"
        LogFile="$(OutputPath)Merged\ILRepack.log"
    />
  </Target>
</Project>

在上面的示例中,合并的 dll 将在子文件夹

merged
下的 bin 输出文件夹中创建。

© www.soinside.com 2019 - 2024. All rights reserved.