1

我有两个程序集:

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

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

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

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

上面提到的所有项目都存在于同一个解决方案中。

我对 ILMerge 相当陌生,所以可能会做一些非常明显的错误。我只是使用内置的 Visual Studio 编译器进行编译。

谁能建议可能出了什么问题?

4

2 回答 2

2

首先,我的建议是使用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 上注册的库。您的单元测试应该只使用插件项目的常规生成输出。

于 2021-03-26T11:35:05.637 回答
1

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

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

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

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

于 2021-03-26T12:59:22.997 回答