【问题标题】:Mapster.Tool fails generating mapperMapster.Tool 无法生成映射器
【发布时间】:2021-02-28 13:18:19
【问题描述】:

Mapster.Tool 无法生成任何代码。
问题似乎是从 CosmosClient 派生的类 - 我从 nuget 包中获得。

我得到了这个例外:

找不到库:Microsoft.Azure.Cosmos.Client
未处理的异常。 System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型。
无法加载文件或程序集“Microsoft.Azure.Cosmos.Client,Version=3.16.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。系统找不到指定的文件。
在 system.Reflection.RuntimeModule.GetTypes(RuntimeModule 模块)
在 System.Reflection.RuntimeModule.GetTypes()
在 System.Reflection.Assembly.GetTypes()
在 D:\git\Mapster\src\Mapster.Tool\Extensions.cs:line 177 中的 Mapster.Tool.Extensions.Scan(CodeGenerationConfig config, Assembly 程序集)
在 D:\git\Mapster\src\Mapster.Tool\Program.cs:line 123 中的 Mapster.Tool.Program.GenerateModels(ModelOptions opt)
在 CommandLine.ParserResultExtensions.WithParsed[T](ParserResult`1 结果,Action`1 操作)
在 D:\git\Mapster\src\Mapster.Tool\Program.cs:第 17 行中的 Mapster.Tool.Program.Main(String[] args)
System.IO.FileNotFoundException:无法加载文件或程序集
'Microsoft.Azure.Cosmos.Client,版本 = 3.16.0.0,文化 = 中性,PublicKeyToken = 31bf3856ad364e35'。系统找不到指定的文件。
文件名:'Microsoft.Azure.Cosmos.Client, Version=3.16.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

当我禁用 mapster 构建目标时,一切正常。
此外,Microsoft.Azure.Cosmos.Client.dll 存在于目标目录中。

Soooo.. 我做错了什么?
我不明白为什么 mapster 无法加载该程序集。
似乎也没有办法让 mapster 忽略该类。

代码如下。

using Mapster;
using Microsoft.Azure.Cosmos;
using System;

namespace MapsterTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }

    public class ApplicationDbClient : CosmosClient
    {
        public ApplicationDbClient() : base("ConnectinString")
        { }
    }

    [AdaptTo(typeof(MyModelDto)), GenerateMapper]
    public class MyModel
    {
        public string SomeProperty { get; set; }
    }

    public class MyModelDto
    {
        public string SomeProperty { get; set; }
    }
}

我的 csproj 文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Mapster" Version="7.1.5" />
    <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.16.0" />
  </ItemGroup>

  <Target Name="Mapster" AfterTargets="AfterBuild">
    <Exec WorkingDirectory="$(ProjectDir)" Command="dotnet tool restore" />
    <Exec WorkingDirectory="$(ProjectDir)" Command="dotnet mapster model -a &quot;$(TargetDir)$(ProjectName).dll&quot;" />
    <Exec WorkingDirectory="$(ProjectDir)" Command="dotnet mapster extension -a &quot;$(TargetDir)$(ProjectName).dll&quot;" />
    <Exec WorkingDirectory="$(ProjectDir)" Command="dotnet mapster mapper -a &quot;$(TargetDir)$(ProjectName).dll&quot;" />
  </Target>

  <ItemGroup>
    <Generated Include="**\*.g.cs" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Models\" />
  </ItemGroup>
  <Target Name="CleanGenerated">
    <Delete Files="@(Generated)" />
  </Target>
  
</Project>

【问题讨论】:

    标签: c# mapster


    【解决方案1】:

    原来这是多个运行时程序集的问题。 见this github issue

    mapster.tool 8.2.0 版已修复此问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多