我有这种情况:
- 相同的 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 包,但是因为它是源生成器,所以生成的类型不同(尽管源代码相同)。
目前我对这个问题有多种想法/解决方案:
- 创建一个名为“ClassLibraryCommon”的新类库,它使用 C# Source Generator,并让“ClassLibrary1”和“ClassLibrary2”都使用这个项目。
- 使用来自AnyOf NuGet的非 C# 源代码生成器这仅包含已生成的 C# 文件,并且不会对源代码生成做任何事情
- ❓ 其他选择?