我在使用 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”安装它):
LibZ 程序集确实使用插件注册工具加载,但一切都中断,没有工作流程或工作。 我是否错误地使用了 LibZ,或者也许还有另一种方法来合并程序集,使其看起来像有效的版本?
对于 Dataverse,现在推荐的方法是使用 插件包。但是,这不是本地安装的选项。这里也不支持经典的工作流程活动。
但是,对于 ILMerge 来说,一个不错的选择是 ILRepack。
请按照以下步骤操作:
ILRepack.Lib.MSBuild.Task
的引用添加到您的插件项目中。ILRepack.targets
的项目中。示例
<?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 输出文件夹中创建。