CRM使用ILMerge将框架库与插件项目合并



我有两个程序集:

  1. 主插件程序集-用于我的项目的插件
  2. 框架程序集-我想将这个程序集与主插件合并,这样我就可以重用在不同项目中经常使用的一些常见方法

我在主插件程序集上安装了ILMerge,并引用了构建的框架dll,同时在解决方案上设置了项目构建顺序。

现在,在我部署之前,这看起来还可以。当我尝试使用我的单元测试项目进行调试时,主要问题出现了。

在我的单元测试项目中,我引用了主插件程序集,它允许我使用fakexrmesy来运行单元测试。然而,现在程序集已经合并,我希望能够在我的单元测试项目中使用框架方法。在引用测试类中的主要插件程序集时,我似乎无法访问这些方法。

上述所有项目都存在于同一个解决方案中。

我是ILMerge的新手,所以可能做了一些显而易见的错误。我只是使用内置的visualstudio编译器进行编译。

有人能提出可能出了什么问题吗?

首先,我的建议是使用ILRepack,因为不再主动维护ILMerge。ILRepack基于ILMerge并且是开源的。将NuGet包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)YourFramework.dll" />
</ItemGroup>
<ILRepack
Parallel="true"
Internalize="false"
InternalizeExclude="@(DoNotInternalizeAssemblies)"
InputAssemblies="@(InputAssemblies)"
LibraryPath="$(OutputPath)"
Wildcards="false"
TargetKind="SameAsPrimaryAssembly"
DebugInfo="false"
KeyFile="YourCompany.snk"
OutputFile="$(OutputPath)Merged$(AssemblyName).dll"
LogFile="$(OutputPath)MergedILRepack.log"
/>
</Target>
</Project>

请注意,根据此配置,您的合并dll是在名为"的单独文件夹中创建的;合并";。这是您在Dynamics 365上注册的库。您的单元测试应该简单地使用插件项目的常规构建输出。

只要您拥有框架程序集的所有代码,一种选择就是使用Visual Studio共享项目。

将框架代码放入一个共享项目将允许您在没有任何额外工具的情况下将插件和框架代码编译到一个程序集中。

在这个答案中,我介绍了我通常如何使用共享项目使插件逻辑可以从插件程序集和控制台应用程序访问,以进行测试/调试。

另一种选择是添加框架源文件作为插件项目的链接。

最新更新