微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决CRM 使用 ILMerge 将框架库与插件项目合并

我有两个程序集:

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

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

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

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

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

我对 ILMerge 还很陌生,所以可能做错了什么,这很明显。我只是使用内置的 Visual Studio 编译器进行编译。

任何人都可以建议可能出了什么问题吗?

解决方法

首先,我的建议是使用 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)Merged\ILRepack.log"
    />
  </Target>
</Project>

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

,

只要您拥有框架程序集的所有代码,一种选择就是使用 Visual Studio Shared Project

将框架代码放入共享项目中,您可以将插件和框架代码编译到一个程序集中,而无需任何其他工具。

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

另一种选择是将框架源文件 as links 添加到插件项目中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。