0

我有这种情况:

  • 相同的 C# 源代码生成器用于两个不同的类库。
  • 另一个 ConsoleApp 引用了这两个类库。
  • 当相同类型(在 ClassLibrary 1中生成)用作在 ClassLibrary 2中采用相同类型的方法的输入参数时,我收到错误 CS1503。有关错误描述,请参见下文:

在此处输入图像描述

CS1503  Argument 1: cannot convert from 'AnyOfTypes.AnyOf<int?, bool> [ClassLibrary1, Version=0.0.18.0, Culture=neutral, PublicKeyToken=null]' to 'AnyOfTypes.AnyOf<int?, bool> [ClassLibrary2, Version=0.0.18.0, Culture=neutral, PublicKeyToken=null]'    ConsoleAppUsesClassLibraries    C:\Dev\GitHub\AnyOf\examples\ConsoleAppUsesClassLibraries\Program.cs    14  Active

两个类库和控制台应用程序的源代码定义如下:

类库 1

using AnyOfTypes;

namespace ClassLibrary1
{
    public class Class1
    {
        public AnyOf<int?, bool> X1(AnyOf<string?, int> value)
        {
            if (value.IsFirst)
            {
                return value.First == "x";
            }

            return value.Second;
        }
    }
}

类库 2

using AnyOfTypes;

namespace ClassLibrary2
{
    public class Class2
    {
        public AnyOf<string?, int> X2(AnyOf<int?, bool> value)
        {
            if (value.IsFirst)
            {
                return $"str = {value.First}";
            }

            return value.Second ? 1 : 0;
        }
    }
}

以及结合了两者的控制台应用程序:

using ClassLibrary1;
using ClassLibrary2;

namespace ConsoleAppConsumer
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var class1 = new Class1();
            var result1 = class1.X1("");

            var class2 = new Class2();
            var result2 = class2.X2(result1); //  CS1503 error
        }
    }
}

我认为这实际上是合乎逻辑的,因为两个类库都使用相同的 NuGet 包,但是因为它是源生成器,所以生成的类型不同(尽管源代码相同)。

目前我对这个问题有多种想法/解决方案:

  1. 创建一个名为“ClassLibraryCommon”的新类库,它使用 C# Source Generator,并让“ClassLibrary1”和“ClassLibrary2”都使用这个项目。
  2. 使用来自AnyOf NuGet的非 C# 源代码生成器这仅包含已生成的 C# 文件,并且不会对源代码生成做任何事情
  3. ❓ 其他选择?
4

0 回答 0